java实现连接ftp然后在线读取文件。

老大提出了一个需求就是因为某种原因,需要自己做一个小型的查询系统,查询的文件就是每天的流水记录,但是流水记录都是放在ftp服务器上的所以自己来实现

当时的第一反应就是连接ftp,然后通过流来读到集合里面,在用分隔符来实现数据的分类,最后插入数据库。

既然思路清醒了,做起来就很简单了。

1连接ftp。

第一步需要两个包。


引入之后就可以进行编码了,先connect,接着是login,成功了之后请尽情的操作ftp,具体的请看文档

代码:

所有的操作都需要ftpClient这个对象实例哈。

ftp.connect("10.160.1.212", 21);
Boolean b = ftp.login("xiaodai", "87660057");// 登录

2读取信息到本地。
ftp.changeWorkingDirectory("/test");
System.out.println("切换到此路径:" + ftp.printWorkingDirectory());

in = ftp.retrieveFileStream("sb.txt");
//这里要说明一下一直对流理解的不是很清楚,1先是指明你要读取的文件 File完成 ,2然后加载到内存fileinputsream
//完成 3解读相应的流,可以用inputsreamreader来实现 4翻译成给IO,用buffereader实现
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String data = null;
try {
while ((data = br.readLine()) != null) {
list.add(data);
}
这样就读取到了本地,后面插入数据库就非常简单了。

下面 是自己在这过程中遇到的一些问题已经解决办法:

java实现连接ftp然后在线读取文件。_第1张图片
解决办法:网上说的有什么连接没有关闭,造成连接过多。可以尝试修改连接数。但是我的是因为IP地址的原因,自己用的IIS,然后中间一次无线网换有线,所以IP地址变了,也就出现这个错误。

2ftp改变当前目录 默认是/(也就是你的共享目录已经存在了)所以没必要在写全路径了。。。。。直接在你共享下写

3Boolean boolss = ftp.storeFile("xiaommmdsds.txt", input);
这里浪费了好半个小时,一直因为前一个参数是远程的目录,反正api理解错了,后来才发现直接就是你想存储到FTP上的新名字
这里 登录啊,什么的都是正常的就是无法上传我擦。。。。。。。

4下载代码:
FileOutputStream out = new FileOutputStream(new File("d:/下载.txt"));
ftp.retrieveFile("/test/sb.txt", out);

5上传代码:
Boolean boolss = ftp.storeFile("xiaommmdsds.txt", input);

你可能感兴趣的:(JAVA)