2013-12-14 40 views
0

在我之前的线程中,我忘记向人们展示我曾试图自己尝试这一点,请放心,我花了过去2个小时试图解决这个愚蠢的问题。加载并保存到txt文件

我需要做到以下几点:

  • 搜索名为 “file.txt的” 文件中,如果null,则创建它。
  • 阅读文件,找到整数(应该是唯一在整个文件)
  • 如果整数不存在,则创建它并将其设置为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文件。每当执行该方法时,我完全期望我的代码将1添加到文件中的int中。

+0

更改代码'赶上(例外五){..'为'赶上(例外五){ e.printStackTrace(); //非常翔实! ..' –

+0

尝试打印出'first',然后再解析它。我的猜测是你会看到为什么数字不解析... –

+0

发布你正在使用的文件的例子。 – Makky

回答

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语句

形式的
+0

当只有一行时,您的建议也会读取两行。 –

+0

哈哈,是的,我注意到,当我得到了投票权 –

+1

现在看起来更好。 :) –