【问题标题】:Load and save to txt file加载并保存到txt文件
【发布时间】:2013-12-14 12:06:19
【问题描述】:

在我之前的帖子中,我忘记向人们展示我自己尝试过这个,请放心,我已经花了 2 个小时试图解决这个愚蠢的问题。

我需要做以下事情:

  • 搜索名为“file.txt”的文件,如果为空,则创建它。
  • 读取文件找整数(应该是整个文件中唯一的东西)
  • 如果整数不存在,则创建它并将其设置为 1
  • 如果已经存在则加1,然后再次保存
  • 再次打开文件,获取整数并将其打印到控制台。

这是我设法得到的:

package science;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;

public class DumpData {

    static void writeStringToFile(String gender, String securityLevel){
        try {




            File file = new File(gender + securityLevel + ".txt");
            //file.getParentFile().mkdirs();

            PrintWriter pr = new PrintWriter(file);

            FileInputStream fs = new FileInputStream(gender + securityLevel + ".txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(fs));
            if (br.readLine() == null) {
                pr.println("" + 0);
            }

            //String first = br.readLine();
            //System.out.println(first);
            try{
                String first = br.readLine();
                  int num = Integer.parseInt(first);
                  int add = (num + 1);
                  pr.println("" + add);
                  pr.close();
                  System.out.println(num);
                } catch (NumberFormatException e) {
                  // not an integer!
                    System.out.println("error");
                    System.out.println(br.readLine());
                }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } 
}

我不断收到消息“错误”打印到控制台,经过更多检查,我发现根本没有将任何内容保存到 .txt 文件中。我完全希望我的代码每次执行该方法时都会在文件中的 int 中添加 1。

【问题讨论】:

  • catch (Exception e) { ..形式的代码修改为catch (Exception e) { e.printStackTrace(); // very informative! ..
  • 在解析之前尝试打印出first。我猜你会明白为什么这个数字没有解析......
  • 发布您在该示例中使用的文件。
  • 与其提出新问题,不如编辑原来的问题以改进它。

标签: java text io


【解决方案1】:

你正在尝试读取一行两次

if (br.readLine() == null) {         <-- first time
    pr.println("" + 0);
}

 //String first = br.readLine();
 //System.out.println(first);
 try{
     String first = br.readLine();   <-- second time

第二次将失败,因为 没有第二行。

只是这样做

String line;
while ((line = br.readLine()) != null){
    int num = Integer.parseInt(line.trim());
    ...
}

你不需要第一个 if 语句

【讨论】:

    【解决方案2】:

    我强烈建议您在处理文件时使用 Apache COMmons IO。

    这是链接:http://commons.apache.org/proper/commons-io/

    查看 FileUtils 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多