我现在做一个从FTP下载的小程序,需要首先,我根据当前时间,去FTP找,有没有当前时间段内的文件,如果有,下载,并分别保存在两个地方,一个是d:/abc/XXXX.TXT,如果有N个文件需要下载,我就需要保存为d:/abc/XXXX1.TXT,d:/abc/XXXX2.TXT.....;一个地方是在D:/abc/FFFF.TXT,也就是要求将XXXX1,XXXX2里的内容,拼在一起,我的代码是这么写的
public void downIcsRealTime(String baseFile,String saveFile) throws Exception {
System.out.println("进入下载");
// FTP下载
TelnetInputStream fget = null;
RandomAccessFile getFile = null;
FtpClient fc = null;
try {
System.out.println(tDay);
int ch;
fc = new FtpClient();// ftp客户端对象
fc.openServer(FTPIP);// 连接ftp服务器
fc.login(USERNAME, PASSWORD);// 登录ftp服务器
fc.binary();// 使用二进制的方式下载 DataInputStream puts2 = new DataInputStream(fc.nameList(""));//
String s = " ";
String[] keepLocate = new String[] { baseFile,
saveFile+s}; // 本地保存
while ((s = puts2.readLine()) != null) {
if (s.indexOf(tDay) > -1) {
System.out.println("找到匹配文件");
for (int i = 0; i < 2; i++) {
fget = fc.get(s);// 读取ftp远程文件
DataInputStream puts = new DataInputStream(fget);//            
File fi = new File(keepLocate[i]);// 新建本地文件
getFile = new RandomAccessFile(fi, "rw");// 以读写的方式打开本地文件
if (i == 1) {
getFile.seek(0); // 将指针放到文件最前段
}
while ((ch = puts.read()) >= 0) {// 循环读取远程文件的内容并写入本地文件中
getFile.write(ch);
}
}
} } System.out.println("下载结束");
} catch (Exception e) {
e.printStackTrace(System.out);
throw new Exception(e.getMessage());
} finally {
try {
fget.close();
} catch (Exception e) {
}
try {
getFile.close();
} catch (Exception e) {
}
try {
fc.closeServer();
} catch (Exception e) {
}
}
}

解决方案 »

  1.   

    现在报错java.io.FileNotFoundException: d:\abc\  (拒绝访问。)
    at java.io.RandomAccessFile.open(Native Method)
    at java.io.RandomAccessFile.<init>(RandomAccessFile.java:204)
    at com.lkxxjk.task.TestFtp.downIcsRealTime(TestFtp.java:80)
    at com.lkxxjk.task.TestFtp.run(TestFtp.java:115)
    at com.lkxxjk.task.TestFtp.main(TestFtp.java:127)
    java.lang.Exception: d:\abc\  (拒绝访问。)
    at com.lkxxjk.task.TestFtp.downIcsRealTime(TestFtp.java:95)
    at com.lkxxjk.task.TestFtp.run(TestFtp.java:115)
    at com.lkxxjk.task.TestFtp.main(TestFtp.java:127)
      

  2.   

    我一共要下载两个文件,XXX1.TXT和XXX2.TXT,我能下载第一个XXX1.TXT到d:/abc/FFFF.TXT,但是在把FTP上的XXX1.TXT下到d:/abc/XXX1.TXT时报上边那个异常
      

  3.   

    File fi = new File(keepLocate[i]);单步到这一行代码,看keepLocate[i]里面是什么?你的程序的业务逻辑应该这里面存的是文件,如果是目录,肯定会报错
      

  4.   


    String[] keepLocate = new String[] { baseFile,
    saveFile+s}; // 本地保存
    存放的是d:/abc/FFFF.TXT和d:/abc/XXX1.TXT这两个
      

  5.   

    d:\abc\--这个目录有没有权限访问?目录是否存在?