我的代码如下:
Scanner sc = null;
try {
sc = new Scanner(new File("assets/mainmenu/readSourceFile.txt"));
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
System.out.println(e1.toString());
e1.printStackTrace();
}
然后,logcat显示异常java.io.FileNotFoundException
如何找到我的档案?我试过了
sc = new Scanner(new File("mainmenu/readSourceFile.txt"));
然而,它仍在抛出FilenotFoundException
我的文件位于文件夹assets / mainmenu / readSourceFile.txt
中我试试这个::
private InputStream is;
try {
is = this.getResources().getAssets().open("mainmenu/readSourceFile.txt");
} catch (IOException e) {
e.toString();
}
我使用getAssets访问android中的资产文件。但是,如果我使用InputStream
答案 0 :(得分:1)
你试试这个......希望它会起作用
sc = new Scanner(new File("file:///android_asset/mainmenu/readSourceFile.txt");
编辑试试这个
AssetFileDescriptor descriptor = getAssets().openFd("mainmenu/readSourceFile.txt");
FileReader reader = new FileReader(descriptor.getFileDescriptor());
从这里复制Asset folder path
答案 1 :(得分:0)
您无法访问Android应用程序的assets
文件夹,就好像它们是文件系统上的常规文件一样(提示:它们不是)。相反,您需要使用AssetManager
。在您的活动/应用程序上下文中调用getAssets()
以获取AssetManager
。
完成此操作后,您可以使用open("mainmenu/readSourceFile.txt")
获取InputStream
。
您现在可以像对待任何其他人一样阅读此InputStream
。 Apache Commons IO是一个很棒的库,用于处理输入和输出流。根据您想要获取数据的方式,您可以尝试:
将整个文件读入字符串:
try {
String contents = IOUtils.toString(in);
} finally {
IOUtils.closeQuietly(in);
}
将整个文件读入一个字符串列表,每行一个:
try {
List<String> lines = IOUtils.readLines(in);
} finally {
IOUtils.closeQuietly(in);
}
一次遍历文件一行:
try {
LineIterator it = IOUtils.lineIterator(in, "UTF-8");
while (it.hasNext()) {
String line = it.nextLine();
// do something with line
}
} finally {
IOUtils.closeQuietly(in);
}
答案 2 :(得分:0)
我有同样的问题。我注意到该文件不应包含层次结构。如果将来有人遇到同样的问题,这对我有用。 `
InputStream is=null;
try {
is=activity.getAssets().open("fileInAssets.dat");
} catch (IOException e1) {
Log.e(TAG, "Erro while openning hosts file.");
e1.printStackTrace();
}
`