テキストファイルから読み取り、printWriterを使用して別のファイルに書き込もうとすると、空白のファイルになります

phasevii

私の割り当ては次のとおりです。

添付のテキストファイルを読み取り、別のテキストファイルを書き出すプログラムを作成します(ファイル名として最初のイニシャルと最後の名前を使用します)。新しいテキストファイルには、入力ファイルと同じテキスト行がすべて含まれている必要がありますが、行の最初の文字として行番号が追加されています。

例:入力行に次のように表示されている場合:

これはテストです

出力は次のようになります

  1. これはテストです

私はほとんど関数型コードであると信じているものを書きました-それを実行すると、コンパイルされて書き込まれる新しいファイルが作成されますが、そのファイルは空白です(0バイトを含みます)。問題を読んで、printWriterと入力/出力ストリームが閉じられている/フラッシュされていることを確認してみました。この時点では、ループに問題があるのか​​、それともcloseメソッドを間違った場所で呼び出しているのかわかりません。どんな助けでも大歓迎です。

コードは次のとおりです。

package module6lecture;

import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class ReadWriteProgram {

public static void main(String[] args) {
    try
    {
        FileInputStream fis = new FileInputStream("C:\\Users\\Reid\\Desktop\\Chapter11.txt");
        FileOutputStream fos = new FileOutputStream("C:\\Users\\Reid\\Desktop\\rulicny.txt");
        Scanner scan = new Scanner(fis);
        PrintWriter pw = new PrintWriter(fos);
        int lineNumber = 1;
        while(scan.hasNextLine());
        {
            String stringRead = scan.nextLine();
            pw.println(lineNumber + ": " + stringRead);
            lineNumber++;
        }
        pw.close();
    }
    catch(FileNotFoundException fnf)
    {
        System.out.println("Unable to find Chapter11.txt. Exiting...");
        fnf.printStackTrace();
    }
}
}

免責事項:私は全くの初心者です。

プシェモ

whileループの直後にセミコロンがあります

while(scan.hasNextLine());
//                       ^

これは、空の命令を表すため、無限ループになります。

while(scan.hasNextLine()){}

だからあなたは実際に入ることはありません

{
    String stringRead = scan.nextLine();
    pw.println(lineNumber + ": " + stringRead);
    lineNumber++;
}

ブロックし、その後にコードを記述します。これは、結果ファイルに何も書き込んでおらず、閉じさえしないことを意味します。空のファイルがで作成された場合にあなたが持っているすべて

FileOutputStream fos = new FileOutputStream("C:\\Users\\Reid\\Desktop\\rulicny.txt");

したがって、このセミコロンを削除します。


ところで、IDE形式のコードを使用してもらうと、この種の間違いを簡単に見つけることができます。Eclipseは私のためにあなたの例を次のようにフォーマットしました

while (scan.hasNextLine())
    ;
{
    String stringRead = scan.nextLine();
    pw.println(lineNumber + ": " + stringRead);
    lineNumber++;
}

ご覧のとおり、ループがコードブロックではなく空のステートメントを実際に実行するのは非常に良いことです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ