.renameTo()的结果将被忽略 [英] Result of .renameTo() is ignored

查看:121
本文介绍了.renameTo()的结果将被忽略的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过FTP上传文件,但是在上传之前,必须将其重命名为2个editText的输入.为此,我使用以下代码:

I am trying to upload a file via FTP, but before it is uploaded it has to be renamed to the input of 2 editText's. To do this i use the following code:

public FTPClient client = new FTPClient();

    public void upload_klik (View view) {
        EditText week_text = (EditText) findViewById(R.id.week_edit);
        EditText pagina_text = (EditText) findViewById(R.id.pagina_edit);
        String w_val = week_text.getText().toString();
        String p_val = pagina_text.getText().toString();
        upload_task up = new upload_task();
        up.execute(w_val, p_val);
    }

    protected class upload_task extends AsyncTask<String, Object, String> {

        @Override
        protected String doInBackground(String... params) {

            String w = params[0];
            String p = params[1];

            Intent intent = getIntent();
            Bundle bundle = intent.getExtras();
            String ret = "Done!";
            if(!bundle.isEmpty()) {
                String afdeling_url = bundle.getString("afdeling_url", "DKW/");
                String afdeling_preFix = bundle.getString("afdeling_preFix", "dkw");
                String locatie_url = bundle.getString("locatie_url", "/delf_wend/");

                String new_fileName = afdeling_preFix +"_" + "w" + w + "_" + "p" + p + ".jpg";

                System.out.println(new_fileName);

                File f = new File(foto_path);
                File sdcard = Environment.getExternalStorageDirectory();
                File to = new File(sdcard, new_fileName);
                f.renameTo(to);

                if(f != null) {

                    try{
                        client.setPassive(true);
                        client.setAutoNoopTimeout(30000);
                        client.connect(FTP_HOST, 21);
                        client.login(FTP_USER, FTP_PASS);
                        client.setType(FTPClient.TYPE_BINARY);
                        System.out.println(locatie_url + afdeling_url);
                        client.changeDirectory(locatie_url + afdeling_url);
                        client.upload(to);

                        restart();

                    }
                    catch (Exception e){
                        e.printStackTrace();
                        try {
                            client.disconnect(true);
                        }
                        catch (Exception e2) {
                            e2.printStackTrace();
                        }
                    }
                }

            }
            return ret;
        }
    }

但是当我尝试赞美它时,Logcat给了我这个:

But when i try to uplaod it Logcat gives me this:

09-09 16:33:17.794  23674-25966/nl.knapper_development.jrw_uploader I/System.out﹕ slag_w11_p222.jpg
09-09 16:33:17.994  23674-25966/nl.knapper_development.jrw_uploader I/System.out﹕ /delf_wend/SLAG/
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ java.io.FileNotFoundException: /slag_w11_p222.jpg
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at it.sauronsoftware.ftp4j.FTPClient.upload(FTPClient.java:2577)
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at it.sauronsoftware.ftp4j.FTPClient.upload(FTPClient.java:2457)
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at nl.knapper_development.jrw_uploader.upload$upload_task.doInBackground(upload.java:154)
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at nl.knapper_development.jrw_uploader.upload$upload_task.doInBackground(upload.java:119)
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-09 16:33:18.024  23674-25966/nl.knapper_development.jrw_uploader W/System.err﹕ at java.lang.Thread.run(Thread.java:818)

我将问题缩小为函数 f.renameTo(new_fileName),它说调用此方法的结果被忽略.但是为什么它被忽略了呢?有没有办法解决这个问题?

i narrowed the problem to to thwe function f.renameTo(new_fileName), it says the result of calling this method is ignored. But why is it ignored? And is there a way around this?

预先感谢您:)

推荐答案

该错误非常直接,因为已全部记录在案:

the error is pretty straight forward is it's all documented:

https://developer.android.com/reference/java/io/File.html#renameTo(java.io.File)

许多故障都是可能的.一些更可能的失败包括:

Many failures are possible. Some of the more likely failures include:

  • 在包含源路径和目标路径的目录上必须具有写权限.
  • 两个路径的所有父级都必须具有搜索权限.
  • 两个路径都在同一安装点上.在Android设备上,尝试在内部存储设备和SD卡之间进行复制时,应用程序很可能会遇到此限制.

https://developer.android.com/reference/java/io/FileNotFoundException.html

当找不到程序指定的文件时抛出

Thrown when a file specified by a program cannot be found

我敢打赌,如果您使用以下代码检查文件是否存在:

I'm betting that if you check if the file exist with the code:

if(f.exists()){

您会发现 foto_path 不是现有文件,或者您应该检查 foto_path 是否也在 Environment.getExternalStorageDirectory()之内.代码>.

you'll find out that foto_path is not an existing file, or maybe you should check that foto_path is also inside Environment.getExternalStorageDirectory().

如果它不在同一装载点,则必须复制文件(使用新名称),而不仅仅是重命名.

If it's not in the same mount point you have to copy the file over (with the new name) instead of just renaming.

这篇关于.renameTo()的结果将被忽略的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆