【问题标题】:Saving to and Reading from a text file, android保存和读取文本文件,android
【发布时间】:2016-03-25 17:55:17
【问题描述】:

我正在尝试在 Android 中保存和读取文本文件。这是从文本文件中读取的文件的一部分:

    Scanner fileScanner;
    String line = null;


    try {
        fileScanner = new Scanner(new File("info.txt"));
        while (fileScanner.hasNext() || line.contains(personName)) {
            line = fileScanner.nextLine();
        }
        List<String> items = Arrays.asList(line.split("\\s*:\\s*"));
        extraInfoTV.setText(items.get(1));
        websites = items.get(2).split("\\s*,\\s*");

这是写入文本文件的文件的一部分:

public void saveButton(View v) {

    String data = getData();
    List<String> linesData;
    linesData = new ArrayList<>();
    if (data != null) for(int i = 0; i < data.split("\n").length; i++){             linesData.add(data.split("\n")[i]); }
    for (int i = 0; i < linesData.size(); i++) {
        if (linesData.get(i).contains(personName)) linesData.remove(i);
    }
    String submit = personNameTV.getText().toString() + ":" + extraInfoTV.getText().toString()
            + ":" + websitesTV.getText().toString();
    linesData.add(submit);
    String finalSubmit = "";
    for (int i = 0; i < linesData.size(); i++){
        finalSubmit += linesData.get(i) + "\n";
    }
    saveData(finalSubmit);
    Intent i = new Intent(EditActivity.this, PersonActivity.class);
    i.putExtra("person", personNameTV.getText().toString());
    startActivity(i);
}

private String getData() {
    try {
        String toReturn;
        FileInputStream fis = openFileInput("info");
        InputStreamReader inputStreamReader = new InputStreamReader(fis);
        BufferedReader br = new BufferedReader(inputStreamReader);
        StringBuffer sb = new StringBuffer();
        while ((toReturn=br.readLine()) != null){
            sb.append(toReturn + "\n");
        }
        fis.close();
        return sb.toString();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return " ";
}

private void saveData(String s){
    try {
        FileOutputStream fos = openFileOutput("info", MODE_PRIVATE);
        fos.write(s.getBytes());
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

每当我在我的测试设备上运行它时,当我单击必要的按钮进行保存(按钮使用方法 saveButton)时,当我转到读取文本文件的 Activity 时,我找不到我写的内容。我究竟做错了什么?提前致谢。

【问题讨论】:

    标签: java android java-io


    【解决方案1】:

    您对清单有读\写权限吗? 由于您在保存方法上有一个 try\catch 块,因此保存操作可能会失败,但除非您查看 logcat 输出,否则您不会注意到。 尝试从保存方法(导致 IOException 的 try\catch)中删除 try\catch 块,并让您的方法抛出此异常以查看您的应用程序是否崩溃,或者只是查看您的 logcat 以查看它是否失败(在这种情况下,您会看到异常堆栈跟踪...)。

    【讨论】:

    • 你指的是哪个 try/catch?请更具体。您可以告诉我这是第一个代码块还是第二个代码块,以及我捕获了哪个异常。谢谢。
    • bw.write() 和 bw.close() 方法要求我捕获 IOException。如果有问题,e.printStackTrace() 无论如何都会向我显示错误(到目前为止我没有收到 IOException)。
    • 写入和关闭方法要求您处理抛出的异常,您不必捕获它您也可以将该方法声明为抛出者,让调用此方法的人处理异常,我的建议是“忽略" 如果您在 logcat 上没有看到任何内容,则临时异常以查看您的应用程序是否存在读\写权限问题先创建文件,然后获取绝对文件的引用,在创建新文件对象后使用 createNewFile() 方法
    • 我编辑了我的代码以确保没有 FileNotFound 异常。希望现在您可以看到该错误。 @crazyPixel
    • @Vicky 我懒洋洋地回答了——你应该使用创建文件对象 :File f = new File("NAME"); f.createNewFile();只有这样你才能真正写入这个文件,因为现在你正在写入的对象只在内存中,因此在你的程序“死”后会被垃圾收集
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多