我正在尝试通过FTP上传文件,但在上传之前,必须将其重命名为2 editText的输入。为此,我使用以下代码:
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给了我这个:
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)
,它说调用此方法的结果被忽略。但为什么会被忽视?有没有办法解决这个问题?
提前谢谢你:)
答案 0 :(得分:1)
错误非常简单,因为它全部记录在案:
https://developer.android.com/reference/java/io/File.html#renameTo(java.io.File)
很多失败都是可能的。一些更可能的失败包括:
- 包含源路径和目标路径的目录需要写入权限。
- 两条路径的所有父母都需要搜索权限。
- 两条路径都在同一个挂载点上。在Android上,尝试在内部存储和SD卡之间复制时,应用程序最有可能达到此限制。
https://developer.android.com/reference/java/io/FileNotFoundException.html
无法找到程序指定的文件时抛出
我敢打赌,如果你检查文件是否与代码一起存在:
if(f.exists()){
您会发现foto_path
不是现有文件,或者您应该检查foto_path
是否也在Environment.getExternalStorageDirectory()
内。
如果它不在同一个挂载点,则必须复制文件(使用新名称),而不是仅重命名。