我无法重命名/移动我的临时文件并将其打开
以下是我用来创建临时文件的代码
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
//[...]
java.io.File tempFile = java.io.File.createTempFile("filetmp", "_handled", null);
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(responseBody); //responseBody (byte[]) not null
fos.close();
//[...]
}
然后,我(尝试)将其保存在磁盘上
private void saveIntoDisk(java.io.File file) {
if (PersitencyManager.isExternalStorageWritable()) {
java.io.File dirEvent = this.getParentEvent().getDirectory();
Log.d("ROOT PATH", "" + dirEvent.getAbsolutePath());
java.io.File myNewFile = new java.io.File(dirEvent.toString() + "/"+identifiant+"_"+name);
Log.d("FILE PATH", "" + myNewFile.getAbsolutePath());
path = myNewFile.getAbsolutePath();
if (!file.renameTo(myNewFile)) {
Log.e("File Rename", "Can not rename this file"); // display on console
} else {
Log.i("File Rename", "Filed renamed successfully");
}
}
}
我创建父文件夹的方式:
public static java.io.File getFolderStorageDir(String folderName) {
// Get the directory for the user's public pictures directory.
java.io.File file = new java.io.File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOCUMENTS), folderName);
if (!file.mkdirs()) {
if (!file.isDirectory()) {
Log.e("Directory_Creation", "Directory not created");
}
}
return file;
}
我在控制台上收到此消息:“无法重命名此文件”。 file.renameTo(myNewFile)
不起作用..
path
似乎很好:
D / FILE PATH:/storage/emulated/0/Documents/12047/4691_test.pdf
这是我的AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
结果:已创建父文件夹但不创建文件...
对我的问题有任何想法吗?
答案 0 :(得分:1)
我发现了问题..
我无法使用位于其他存储区域的路径重命名文件。
renameTo():两个路径都在同一个挂载点上。在Android上,应用程序是 在尝试复制时最有可能达到此限制 内部存储和SD卡。
当我创建临时文件时,我在null
参数上提供了directory
,并且正如Google所说
目录: [...] null表示临时文件的默认位置,取自 “java.io.tmpdir”系统属性。 [...]
所以我的临时目录在内部存储上而不是SD卡目录。
所以,我修改了目录:
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
//[...]
java.io.File dir = new java.io.File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOCUMENTS), folderName);
java.io.File tempFile = java.io.File.createTempFile("filetmp", "_handled", dir.getAbsolutePath());
FileOutputStream fos = new FileOutputStream(tempFile);
fos.write(responseBody); //responseBody (byte[]) not null
fos.close();
//[...]
}
答案 1 :(得分:0)
尝试使用Context提供的getFileStreamPath方法,而不是使用原始File构造函数。也就是说,做:
File oldfile = ctx.getFileStreamPath("shoppinglists.tmp");
File newfile = ctx.getFileStreamPath("shoppinglists.csv");
oldFile.renameTo(newFile);
问题可能是新的File()引用了一个相对于程序当前目录的名称,该名称可能不是,当然不能保证是存储内部文件的目录。