suzf178 2022-04-13 07:10 采纳率: 100%
浏览 25
已结题

android从ftp下载图片到sd卡中,图片中存储的数据丢失,如何解决?

问题遇到的现象和发生背景

安卓下载ftp服务器中的jpg图片,下完完成之后,保存在图片中的数据丢失了一部分

问题相关代码,请勿粘贴截图
//ftp连接代码
public FTPClient getFTPClient(String ftpHost, int ftpPort, String ftpUserName, String ftpPassword) {
        if (ftpClient == null) {
            ftpClient = new FTPClient();
        }
        if (ftpClient.isConnected()) {
            return ftpClient;
        }
        Log.e(TAG, "ftpHost:" + ftpHost + ",ftpPort:" + ftpPort);
        
        try {
            // 设置超时时间
            ftpClient.setConnectTimeout(50000);
            // 设置中文编码集,防止中文乱码
            ftpClient.setControlEncoding("GBK");
            //连接服务器
            ftpClient.connect(ftpHost, ftpPort);
            int replyCode = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(replyCode)) {
                Log.e(TAG, "connect fail: replyCode:" + replyCode);
                return ftpClient;
            }
            Log.e(TAG, "connect success: replyCode" + replyCode);
            //登录
            Log.e(TAG, "ftpUserName:" + ftpUserName + ",ftpPassword:" + ftpPassword);
            ftpClient.login(ftpUserName, ftpPassword);
            int replyCode1 = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(replyCode1)) {
                ftpClient.disconnect();
                Log.e(TAG, "login fail: replyCode:" + replyCode1);
                return ftpClient;
            }
            Log.e(TAG, "login success: replyCode:" + replyCode);
            //使用被动模式
            ftpClient.enterLocalPassiveMode();
            //二进制文件支持
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
        } catch (IOException e) {
            e.printStackTrace();
            Log.e(TAG, e.getMessage());
            return null;
        }
        return ftpClient;
    }



//文件下载代码
private void downLoadFile(String name){
        //下载文件
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                // 默认失败
                boolean flag = false;
                try {
                    //使用被动模式
                    ftpClient.enterLocalPassiveMode();
                    // 跳转到文件目录
                    ftpClient.changeWorkingDirectory(ftpFileNow);
                    // 获取目录下文件集合
                    FTPFile[] files = ftpClient.listFiles();
                    for (FTPFile file : files) {
                        // 取得指定文件并下载
                        if (file.getName().equals(name)) {
                            Log.e("fileName:", name);
                            File downFile = new File(createNew.getPath() + File.separator + file.getName());
                            if (downFile.exists()){
                                downFile.delete();
                                downFile.createNewFile();
                            }
                            OutputStream fos = null;
                            try {
                                fos = new FileOutputStream(downFile);
                                flag = ftpClient.retrieveFile(new String(file.getName().getBytes(),StandardCharsets.ISO_8859_1), fos);
                                fos.flush();
                                if (flag){
                                    showToast("下载成功");
                                    downLoadFilePath = createNew.getPath();
                                }else {
                                    showToast("下载失败");
                                }
                                fos.close();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
    }

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

展开全部

  • 写回答

2条回答 默认 最新

  • suzf178 2022-04-15 00:49
    关注

    应该是我用的android studio模拟器连接ftp服务器的问题,用真机调试没有出过这个现象

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月15日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 ceph的对象、块、文件相关问题求解答
  • ¥50 如果使用python进行ERA5 10米风场预报检验
  • ¥15 navicat解析mysql密码
  • ¥15 SDAPI(关键词-table)
  • ¥15 unity安卓打包出现问题
  • ¥15 爱快路由器端口更改错误导致无法访问
  • ¥20 安装catkin时遇到了如下问题请问该如何解决呢
  • ¥15 VAE模型如何输出结果
  • ¥15 编译python程序为pyd文件报错:{"source code string cannot contain null bytes"
  • ¥20 关于#r语言#的问题:广义加行模型拟合曲线后如何求拐点
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部