gpt4 book ai didi

Java.io.File - 无法在 Android 上重命名和移动文件

转载 作者:行者123 更新时间:2023-12-01 11:17:47 28 4
gpt4 key购买 nike

我无法重命名/移动临时文件并打开它

这是我用来创建临时文件的代码

@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) 不起作用..

路径似乎不错:

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" />

结果:创建了父文件夹,但未创建文件...

对我的问题有什么想法吗?

最佳答案

我发现了问题..

我无法重命名路径位于其他存储区域的文件。

renameTo() : Both paths be on the same mount point. On Android, applications are most likely to hit this restriction when attempting to copy between internal storage and an SD card.

当我创建临时文件时,我在 directory 参数处给出 null ,正如 Google 所说

directory : [...] null for the default location for temporary files, which is taken from the "java.io.tmpdir" system property. [...]

所以我的临时目录位于内部存储上,而不是 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();
//[...]
}

关于Java.io.File - 无法在 Android 上重命名和移动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31590930/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com