.renameTo()的结果将被忽略 [英] Result of .renameTo() is ignored
问题描述
我正在尝试通过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屋!