2013-12-14 150 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

現在看起來更好。 :) –