如何在android中读取/写入.text文件

时间:2014-05-15 10:09:09

标签: java android io

我试图从.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文件?

3 个答案:

答案 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();
    }
}