ftp上传下载



import sun.net.ftp.*;
import sun.net.*;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
* 使用sun.net.ftp工具包进行ftp上传下载
*/
public class FtpTool {
String ip;
int port;
String user;
String pwd;
String remotePath;
String localPath;
FtpClient ftpClient;

/**
* 连接ftp服务器
*
* @param ip
* @param port
* @param user
* @param pwd
* @return
* @throws Exception
*/
public boolean connectServer(String ip, int port, String user, String pwd)
throws Exception {
boolean isSuccess = false;
try {
ftpClient = new FtpClient();
ftpClient.openServer(ip, port);
ftpClient.login(user, pwd);
isSuccess = true;
} catch (Exception ex) {
throw new Exception("Connect ftp server error:" + ex.getMessage());
}
return isSuccess;
}

/**
* 下载文件
*
* @param remotePath
* ftp文件夹路径
* @param localPath
* 下载到本地路径
* @param filename
* ftp文件名称
* @throws Exception
*/
public void downloadFile(String remotePath, String localPath,
String filename) throws Exception {
try {
if (connectServer(getIp(), getPort(), getUser(), getPwd())) {
// 创建文件夹
java.io.File myFilePath = new java.io.File(localPath);
if (!myFilePath.isDirectory()) {
myFilePath.mkdir();
}

if (remotePath.length() != 0)
ftpClient.cd(remotePath);
ftpClient.binary();
TelnetInputStream is = ftpClient.get(filename);
File file_out = new File(localPath + File.separator + filename);
FileOutputStream os = new FileOutputStream(file_out);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
is.close();
os.close();
ftpClient.closeServer();
}
} catch (Exception ex) {
throw new Exception("ftp download file error:" + ex.getMessage());
}
}

/**
* 上传文件
*
* @param remotePath
* @param localPath
* @param filename
* @throws Exception
*/
public void uploadFile(String remotePath, String localPath, String filename)
throws Exception {
try {
if (connectServer(getIp(), getPort(), getUser(), getPwd())) {
if (remotePath.length() != 0)
ftpClient.cd(remotePath);
ftpClient.binary();
TelnetOutputStream os = ftpClient.put(filename);
File file_in = new File(localPath + File.separator + filename);
FileInputStream is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
is.close();
os.close();
ftpClient.closeServer();
}
} catch (Exception ex) {
throw new Exception("ftp upload file error:" + ex.getMessage());
}
}

/**
* @return
*/
public String getIp() {
return ip;
}

/**
* @return
*/
public int getPort() {
return port;
}

/**
* @return
*/
public String getPwd() {
return pwd;
}

/**
* @return
*/
public String getUser() {
return user;
}

/**
* @param string
*/
public void setIp(String string) {
ip = string;
}

/**
* @param i
*/
public void setPort(int i) {
port = i;
}

/**
* @param string
*/
public void setPwd(String string) {
pwd = string;
}

/**
* @param string
*/
public void setUser(String string) {
user = string;
}

/**
* @return
*/
public FtpClient getFtpClient() {
return ftpClient;
}

/**
* @param client
*/
public void setFtpClient(FtpClient client) {
ftpClient = client;
}

/**
* @return
*/
public String getRemotePath() {
return remotePath;
}

/**
* @param string
*/
public void setRemotePath(String string) {
remotePath = string;
}

/**
* @return
*/
public String getLocalPath() {
return localPath;
}

/**
* @param string
*/
public void setLocalPath(String string) {
localPath = string;
}

/**
*
* 取得指定目录下的所有文件列表,包括子目录.
*
* @param baseDir
* File 指定的目录
*
* @return 包含java.io.File的List
*
*/

private static List<File> getSubFiles(File baseDir) {

List<File> ret = new ArrayList<File>();

File[] tmp = baseDir.listFiles();

for (int i = 0; i < tmp.length; i++) {

if (tmp[i].isFile())

ret.add(tmp[i]);

if (tmp[i].isDirectory())

ret.addAll(getSubFiles(tmp[i]));

}

return ret;

}

/**
*
* 给定根目录,返回一个相对路径所对应的实际文件名.
*
* @param zippath
* 指定根目录
*
* @param absFileName
* 相对路径名,来自于ZipEntry中的name
*
* @return java.io.File 实际的文件
*
*/

private static File getRealFileName(String zippath, String absFileName) {

String[] dirs = absFileName.split("/", absFileName.length());

File ret = new File(zippath);// 创建文件对象

if (dirs.length > 1) {

for (int i = 0; i < dirs.length - 1; i++) {

ret = new File(ret, dirs[i]);

}

}

if (!ret.exists()) {// 检测文件是否存在

ret.mkdirs();// 创建此抽象路径名指定的目录

}

ret = new File(ret, dirs[dirs.length - 1]);// 根据 ret 抽象路径名和 child
// 路径名字符串创建一个新 File 实例

return ret;

}

/**
*
* 取得ftp服务器上某个目录下的所有文件名
*
* @param ftp,
* FtpClient类实例; folderName,服务器的文件夹名
*
* @throws Exception
*
* @return list 某目录下文件名列表
*
*/

private List getServerFileNameList(FtpClient ftp, String folderName)
throws Exception {

BufferedReader dr = new BufferedReader(new InputStreamReader(ftp
.nameList(folderName)));

List<String> list = new ArrayList<String>();

String s;

while ((s = dr.readLine()) != null) {

list.add(s);

}

return list;

}

public static void main(String[] args) throws Exception {
FtpTool tt = new FtpTool();
boolean bb = tt.connectServer("195.205.1.2", 21, "ftppub", "ftppub");
System.out.println(bb);
tt.ip = "195.205.1.2";
tt.port = 21;//端口号
tt.user = "ftppub";
tt.pwd = "ftppub";
// tt.downloadFile("/opt/up/20100810/","E:/ftp","SEQNO_20100810.zip");
tt.downloadFile("/opt/up/20100810/", "E:/ftp/oppt",
"DIR.SEQNO_20100810.txt");
/*
* List list =
* tt.getServerFileNameList(tt.ftpClient,"/opt/up/20100810/SEQNO_20100810.zip");
* for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); }
*/
}

}

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值