我尝试使用此功能将文件从assets文件夹复制到设备文件夹:
public static void copyJSON(Context aContext) {
AssetManager assetManager = aContext.getResources().getAssets();
String[] pFiles = null;
try {
pFiles = assetManager.list("ConfigurationFiles");
} catch (IOException e) {
Log.e("tag", "Failed to get asset file list.", e);
}
if (pFiles != null) for (String pJsonFileName : pFiles) {
InputStream tIn = null;
OutputStream tOut = null;
try {
tIn = assetManager.open("ConfigurationFiles" + File.separator + pJsonFileName);
String[] pList = aContext.getFilesDir().list(); //just for test
File pOutFile = new File(aContext.getFilesDir(), pJsonFileName);
tOut = new FileOutputStream(pOutFile);
if (pOutFile.exists()) {
copyFile(tIn, tOut);
}
} catch (IOException e) {
Log.e("tag", "Failed to copy asset file: " + pJsonFileName, e);
} finally {
if (tIn != null) {
try {
tIn.close();
} catch (IOException e) {
Log.e("tag", "Fail closing", e);
}
}
if (tOut != null) {
try {
tOut.close();
} catch (IOException e) {
Log.e("tag", "Fail closing", e);
}
}
}
}
}
如果我删除应用程序并运行代码,变量pList就像我预期的那样是空的,但是pOutFile.exists()返回true总是!!。
我不想每次打开我的应用程序时再次复制它们,而且我这样做是因为我的所有应用都使用JSON来浏览所有屏幕,所以如果我更改了我的任何值BBDD一个WS发送一个新的JSON文件,应用程序响应,例如不再需要一个按钮,所以你第一次下载我的应用程序我复制原始的JSON,如果你使用该应用程序,如果你有互联网连接你将下载一个新的JSON文件,它比Bundle中的更准确,它将被覆盖,这是因为据我所知,我无法更改assets文件夹中的文件。 / p>
我到处都读过,所有人都这样说:
File pOutFile = new File(aContext.getFilesDir(), pJsonFileName);
然后问这个:
pOutFile.exists()
我不知道自己做错了什么。
感谢您的帮助。
答案 0 :(得分:1)
这样说:
File pOutFile = new File(aContext.getFilesDir(), pJsonFileName);
if (pOutFile.exists()) {
tOut = new FileOutputStream(pOutFile);
copyFile(tIn, tOut);
}
一切都应该正常。请记住FileOutputStream
创建应该流式传输的文件(如果可能且不存在)
答案 1 :(得分:0)
问题是你实际上是在创建一个文件,然后检查它是否存在。
try {
tIn = assetManager.open("ConfigurationFiles" + File.separator + pJsonFileName);
String[] pList = aContext.getFilesDir().list(); //just for test
File pOutFile = new File(aContext.getFilesDir(), pJsonFileName);
// See here: you're creating a file right here
tOut = new FileOutputStream(pOutFile);
// And that file will be created in the exact location of the file
// you're trying to check:
if (pOutFile.exists()) { // Will always be true if FileOutputStream was successful
copyFile(tIn, tOut);
}
}
您应该在完成存在检查后创建FileOutputStream。
来源:http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html
答案 2 :(得分:0)
您刚刚创建但未获得异常的文件始终存在。测试毫无意义。删除它。