我试图从.txt文件中将单词列表导入到arraylist中。现在我将我的.txt文件放入assets文件夹中。 到目前为止,我可以使用以下代码
来完成此操作try {
AssetManager am = this.getAssets();
InputStream inputStream = am.open(inputFile);
if (inputStream != null) {
InputStreamReader streamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(streamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
words.add(line);
}
}
inputStream.close(); // close the file
} catch (IOException e) {
e.printStackTrace();
}
然后我希望能够将我的arraylist洗牌并将其放回到相同的.txt文件中,以便下次打开应用程序时它会导入洗牌列表。但事实证明,您无法写入资产文件夹中的文件。是否有不同的方法从.txt文件导入单词并仍然能够导出到相同的.txt文件?我需要在哪里放置.txt文件?
答案 0 :(得分:1)
1)将您的txt文件放在资产中。
2)在第一次启动时,将您的txt文件从资产复制到内部存储
获取资产中文件的InputStream:
InputStream inputStream = am.open(inputFile);
在内部存储中获取文件的OutputStream:
File f = context.getFileStreamPath("filename.txt");
OutputStream outputStream = new FileOutputStream(f);
将数据从输入流复制到输出流:
ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 8);
ReadableByteChannel ich = Channels.newChannel(inputStream);
WritableByteChannel och = Channels.newChannel(outputStream);
while (ich.read(buffer) > -1 || buffer.position() > 0)
{
buffer.flip();
och.write(buffer);
buffer.compact();
}
ich.close();
och.close();
3)从内部存储中读取数据:
File f = context.getFileStreamPath("filename.txt");
FileReader fr = new FileReader(f);
int chr = fr.read(); // read char
fr.close();
4)将数据写入内部存储:
File f = context.getFileStreamPath("filename.txt");
FileWriter fw = new FileWriter(f);
fw.write("word"); // write string
fw.close();
您可以逐行使用BufferedReader而不是FileReader来读取文件。
答案 1 :(得分:0)
您无法写入assets文件夹的文件,因为它们是只读文件。您只能阅读它,无法修改或更新资产文件夹。
请记住,资产或drawables,values,xml的所有资源都只是只读文件。它无法修改。
因此,最好将文件复制到SD卡中,然后将其修改为外部存储,然后再读取。
答案 2 :(得分:0)
试试这个,
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt"), "UTF-8"));
// do reading, usually loop until end of file reading
if (inputStream != null) {
InputStreamReader streamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(streamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
words.add(line);
}
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
reader.close();
}
}