1

テキストファイルがある場合:

AAA:123:123:AAAA
BBB:456:456:BBBB

最初は、テキスト ファイルに空白行がなく、データを読み込んで取得した場合。すべて順調。

ファイルを新しいファイルに書き込み、データを置き換えたり更新したりする場合

AAA:9993:9993:AAAA
BBB:456:456:BBBB
-------- This is a blank line-----------

この後、NoSuchElementException が発生します。空白行を削除しないと、常にエラーが表示されます。

try {
File fileCI = new File("CI.txt");
FileWriter fileWriter = new FileWriter(fileCI);
BufferedWriter bw = new BufferedWriter(fileWriter); 

for (Customer ci : custList){
if (inputUser.equals(ci.getUserName()) && inputPass.equals(ci.getPassword())) {
    ci.setCardNo(newCardNo);
    ci.setCardType(newCardType);
}
    String text = ci.getRealName() + ";" + ci.getUserName() + ";" + ci.getPassword() + ";" + ci.getAddress() + ";" + ci.getContact() + ";" + ci.getcardType() + ";" + ci.getcardNo() + System.getProperty("line.separator");                                
    bw.write(text);
}
    bw.close();
    fileWriter.close();
}
catch (IOException e) {
    e.printStackTrace();
}

System.getProperty("line.separator"); を追加しない場合 文字列が追加され、すべてが新しい区切り記号なしで 1 行に結合されます。ただし、この区切り記号により、テキスト ファイルの最後に空白行が追加されます。この問題を回避するためにできることはありますか?

ファイルを読んだところで解くべきですか?または、ファイルを新しいファイルに書き込む場所で解決します。

    try {
        Scanner read = new Scanner(file);

        read.useDelimiter(";|\n");
        String tmp = "";
        while (read.hasNextLine()){
            if (read.hasNext()){
                custList.add(new Customer(read.next(), read.next(), read.next(), read.next(), read.next(), read.next(), read.next()));
            } else {
                break;
            }
        }
        read.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }

編集: この上記の読み取りは、今では完全に機能します!

4

1 に答える 1

1

残りの行がなく、まだ行を読み込もうとしているファイルの終わり(EOF)に到達したと思います。したがって、 NoSuchElementException が発生します(行が見つからない場合)。

これを試して:

String tmp="";
while (reader.hasNextLine()){  
   tmp = s.nextLine();
   // then do something

}

\n区切り文字で使用する必要はないと思います。を使用しているため、scanner.hasNextLine(). あなたが使用したい場合scanner.next()。それで

read.useDelimiter(";|\n");

上記の行は次のとおりです。

read.useDelimiter(";|\\n");// use escape character.

そして、このようにループします。

while(s.hasNext()){ 
    //do something.
}
于 2013-04-29T13:00:26.173 に答える