1

我正在使用以下代码段将文件下载到 Android 手机的 SD 卡。在 Wireshark 跟踪中,我看到文件已传输并且 FTP 传输完成消息也是如此。但 SD 卡中的文件大小为零。所有必需的权限都在清单文件中设置。有人可以帮忙吗?也不适用于 FileOutputStream。

       try{
       ftpClient.connect(InetAddress.getByName("xxx.xxx.xxx.xxx"));        
       ftpClient.login("xxxx", "xxxxx");
       ftpClient.changeWorkingDirectory("xxxx");
       ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
       ftpClient.enterLocalPassiveMode();

       //FileOutputStream desFileStream = new FileOutputStream("/sdcard/test25.txt");
       BufferedOutputStream desFileStream = new BufferedOutputStream(new FileOutputStream("/sdcard/test25.txt"),8*1024);

         boolean status=ftpClient.retrieveFile("test.txt", desFileStream);

         if(status){
        Toast toast = Toast.makeText(getApplicationContext(), "Downlaoded", Toast.LENGTH_SHORT);
        toast.show();
         }

       //desFileStream.flush();

       ftpClient.logout();
       ftpClient.disconnect();

       }

       catch (IOException e){
        Toast toast = Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT);
        toast.show();
        }
4

2 回答 2

1

为什么 .flush() 调用被注释掉了?你试过 .flush()'ing 和 .close()'ing 吗?

根据文档

冲洗()

刷新此流以确保将所有待处理数据写出到目标流。

于 2012-05-04T04:00:49.537 回答
1

完成写入后,您需要关闭输出流:

BufferedOutputStream desFileStream = new BufferedOutputStream(new FileOutputStream("/sdcard/test25.txt"),8*1024);
boolean status=ftpClient.retrieveFile("test.txt", desFileStream);
desFileStream.close();
于 2012-05-04T04:00:49.763 回答