我正在嘗試從 .txt 檔案中掃描一行文本,將其分成七個數字,更改其中兩個數字,然后將新數字寫回 .txt 檔案。下面的代碼第一次運行良好,但似乎在第二次從文本檔案中讀取新的起始字串時出現問題。我已經多次做過非常相似的事情并且沒有任何問題,所以我真的不確定為什么這次我會遇到問題。我目前擁有的代碼是:
public void addWin(int numGuesses) throws IOException {
FileWriter writer = new FileWriter(*filepath*);
Scanner scan = new Scanner(new File(*filepath*));
String temp = "0;0;0;0;0;0;0;";
if (scan.hasNextLine()) {
temp = scan.nextLine();
}
String[] statsArr = temp.split(";");
scan.close();
statsArr[0] = Integer.toString(Integer.parseInt(statsArr[0]) 1);
statsArr[numGuesses] = Integer.toString(Integer.parseInt(statsArr[numGuesses]) 1);
for (int i = 0; i < statsArr.length; i ) {
writer.append(statsArr[i] ";");
}
writer.close();
}
如果需要一些額外的背景關系,這本質上是用于我擁有的 Discord 機器人的 Wordle 克隆之類的東西。numGuesses是使單詞正確的猜測次數。寫入和讀取的字串是 7 個數字除以分號,第一個數字是當前連勝,第二個數字是您在 1 次猜測中獲勝的次數,依此類推。我所做的測驗似乎將錯誤放在掃描儀關閉之前的某個地方。第一次運行將正確寫入數字,因此如果在 3 次嘗試中猜到了該單詞,則檔案將包含“1;0;0;1;0;0;0;”,但下一次呼叫該方法時本質上是從頭開始。檢查溫度在第二次運行的 if 陳述句之后的變數只顯示“0;0;0;0;0;0;0;”。抱歉啰嗦了,只是想提供所有可能有用的細節。先感謝您!
-
uj5u.com熱心網友回復:
考慮一下JavaDoc,它宣告“檔案是否可用或是否可以創建取決于底層平臺。 ”。所以這里發生的事情是,當您使用檔案時,new FileWriter(*filepath*)該檔案被鎖定/創建為空白,因此當您使用時new Scanner(new File(*filepath*));,scan.hasNextLine()您會得到一個空值/空值。
簡單的解決方案是簡單地將 FileWriter 在代碼中進一步向下移動,并且僅在掃描儀關閉后才打開它。else還要在您的宣告中添加一個,if以便您知道從掃描儀讀取是否存在問題:
//Move the below line to be later in the code
//FileWriter writer = new FileWriter(*filepath*);
Scanner scan = new Scanner(new File(*filepath*));
String temp = "0;0;0;0;0;0;0;";
if (scan.hasNextLine()) {
temp = scan.nextLine();
}
//Add some debugging
else{
System.out.println("ERROR no data could be read");
}
String[] statsArr = temp.split(";");
scan.close();
statsArr[0] = Integer.toString(Integer.parseInt(statsArr[0]) 1);
statsArr[numGuesses] = Integer.toString(Integer.parseInt(statsArr[numGuesses]) 1);
//Create the flie writer here instead
FileWriter writer = new FileWriter(*filepath*);
for (int i = 0; i < statsArr.length; i ) {
writer.append(statsArr[i] ";");
}
writer.close();
現在假設該檔案存在并且可以編輯,而 where numGuesses = 3,則為以下內容:
1;2;3;4;5;6;7;
運行代碼的輸出符合預期( 1 到 0 和 3rd 索引)
2;2;3;5;5;6;7;
您只看到的0;0;0;0;0;0;0;原因是代碼無法從掃描儀讀取,并且始終使用此行中的臨時值String temp = "0;0;0;0;0;0;0;";。通過添加else上面的檢查,我們可以看到它何時失敗。
uj5u.com熱心網友回復:
FileWriter writer = new FileWriter(*filepath*);清除您嘗試讀取的檔案的內容。你需要在之后移動這條線scan.close();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449351.html
