Java 在android中保存/读取文件

Java 在android中保存/读取文件,java,android,arraylist,android-file,Java,Android,Arraylist,Android File,我想在android中保存一个文件,之后会删除我的一些arrayList。我已经有两种方法可以从android文件中写入/读取,但问题是我希望这两种方法可以做到这一点: 第一个方法必须保存arraylist的元素,然后如果我再次调用它,它将不会在同一行中写入新元素,而是在另一行中写入新元素 第二个必须读取一行(例如,我给方法指定了哪一行,它返回这些行包含的内容) 该文件如下所示: firstelem secondelem thridelem anotherelem another ..

我想在android中保存一个文件,之后会删除我的一些arrayList。我已经有两种方法可以从android文件中写入/读取,但问题是我希望这两种方法可以做到这一点:

  • 第一个方法必须保存arraylist的元素,然后如果我再次调用它,它将不会在同一行中写入新元素,而是在另一行中写入新元素

    • 第二个必须读取一行(例如,我给方法指定了哪一行,它返回这些行包含的内容)
该文件如下所示:

firstelem
secondelem
thridelem

anotherelem
another ..
在android java中可以做到这一点吗? 附言:我不需要数据库

更新 这是我的方法:

 private void writeToFile(String data) {
        try {
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("config.txt", Context.MODE_PRIVATE));
            outputStreamWriter.write(data);
            outputStreamWriter.close();
        }
        catch (IOException e) {
            Log.e("Exception", "File write failed: " + e.toString());
        }
    }



    private String readFromFile() {

        String ret = "";

        try {
            InputStream inputStream = openFileInput("config.txt");

            if ( inputStream != null ) {
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                String receiveString = "";
                StringBuilder stringBuilder = new StringBuilder();

                while ( (receiveString = bufferedReader.readLine()) != null ) {
                    stringBuilder.append(receiveString);
                    // stringBuilder.append("\\n");
                }

                inputStream.close();
                ret = stringBuilder.toString();
            }
        }
        catch (FileNotFoundException e) {
            Log.e("login activity", "File not found: " + e.toString());
        } catch (IOException e) {
            Log.e("login activity", "Can not read file: " + e.toString());
        }

        return ret;
    }

对于写入,与非法参数状态一样-追加“\n”:

void writeToFileWithNewLine(String data) {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("config.txt", Context.MODE_PRIVATE));
        outputStreamWriter.write(data + "\n");
        outputStreamWriter.close();
    }
    catch (IOException e) { /* handle exception */ } 
}
对于阅读(只是想法,实际上您应该只阅读一次文件):

字符串读取行(最终整数行号){
InputStream in=新文件InputStream(“file.txt”);
ArrayList行=新的ArrayList();
试一试{
InputStreamReader inReader=新的InputStreamReader(in);
BufferedReader读取器=新的BufferedReader(inReader);
弦线;
做{
line=reader.readLine();
行。添加(行);
}while(line!=null);
}捕获(异常e){/*处理异常*/}
最后{
in.close();
}
如果(lineNo=0){
返回行。获取(行号);
}否则{
抛出新的IndexOutOfBoundsException();
}
}

使用链接到的保存方法,您可以使用
StringBuilder创建要保存的文本

public String makeArrayListFlatfileString(List<List<String>> listOfLists)
{
    StringBuilder sb = new StringBuilder();
    if (!listOfLists.isEmpty()) {
        // this assumes all lists are the same length
        int listLengths = listOfLists.get(0).size();
        for (int i=0; i<listLengths; i++)
        {
            for (List<String> list : listOfLists)
            {
                sb.append(list.get(i)).append("\n");
            }
            sb.append("\n");  // blank line after column grouping
        }
    }
    return sb.toString();
}
公共字符串makeArrayListFlatfileString(列表列表)
{
StringBuilder sb=新的StringBuilder();
如果(!listOfLists.isEmpty()){
//这假定所有列表的长度相同
int listLength=listOfLists.get(0.size();

对于(int i=0;i在每次插入后将“\\n”添加到您的文件中,请向我们展示您到目前为止的代码。从您对问题的描述中很难看出确切的用例,代码应该有助于澄清这一点。@不可分割是的,我将添加2分钟的代码。这不是一个家庭作业,但完成这项工作的小项目只是我项目的一部分(我没有足够的时间,因此我请求帮助)。谢谢你的回答!好的,在这种情况下,我也会提供一个快速的阅读解决方案。请记住,如果列表长度不同,这将不起作用,并且对于大数据集来说不是一个很好的解决方案。第二种方法不起作用,但我明白了这个想法,谢谢!)
public String makeArrayListFlatfileString(List<List<String>> listOfLists)
{
    StringBuilder sb = new StringBuilder();
    if (!listOfLists.isEmpty()) {
        // this assumes all lists are the same length
        int listLengths = listOfLists.get(0).size();
        for (int i=0; i<listLengths; i++)
        {
            for (List<String> list : listOfLists)
            {
                sb.append(list.get(i)).append("\n");
            }
            sb.append("\n");  // blank line after column grouping
        }
    }
    return sb.toString();
}
public List<List<String>> getListOfListsFromFlatfile(String data)
{
    // split into lines
    String[] lines = data.split("\\n");
    // first find out how many Lists we'll need
    int numberOfLists = 0;
    for (String line : lines){
        if (line.trim().equals(""))
        {
            // blank line means new column grouping so stop counting
            break;
        }
        else
        {
            numberOfLists++;
        }
    }
    // make enough empty lists to hold the info:
    List<List<String>> listOfLists = new ArrayList<List<String>>();
    for (int i=0; i<numberOfLists; i++)
    {
        listOfLists.add(new ArrayList<String>());
    }
    // keep track of which list we should be adding to, and populate the lists
    int listTracker = 0;
    for (String line : lines)
    {
        if (line.trim().equals(""))
        {
            // new block so add next item to the first list again
            listTracker = 0;
            continue;
        }
        else
        {
            listOfLists.get(listTracker).add(line);
            listTracker++;
        }
    }
    return listOfLists;
}