0

こんにちは、私のJavaプログラムは、プロンプトが表示されたときにユーザーが入力した.txtファイルを読み取って表示し、ファイル内の整数を出力.datファイルに変換してから、その.datファイルを読み取って数値を再度表示することになっています。プログラムを実行すると、ファイルの内容が表示され、.dat ファイルが作成されますが、再度読み込まれません。私のコードは以下です。私は何をする必要がありますか?

public class InputFile
{
    public static void main(String [] args)
    {
        BufferedReader inputStream = null;

            System.out.print("Enter file name (with .txt extension): ");
            Scanner keys = new Scanner(System.in);
            String inFileName = keys.next();

            try
            {
                inputStream = new BufferedReader (new FileReader(inFileName));
                System.out.println("The file " + inFileName + " contains the following lines:");
                String inFileString = inputStream.readLine();
                while(inFileString != null)
                {
                    System.out.println(inFileString);
                    inFileString = inputStream.readLine();
                }
                inputStream.close();
            }
            catch(FileNotFoundException e)
            {
                System.out.println(inFileName + " not found! Try Again.");
            }
            catch(IOException e)
            {
                System.out.println(e.getMessage());
            }

            String fileName = "numbers.dat";
            try
            {
                ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName));
                int anInt = 0;
                while(anInt >=0);
                {
                    anInt = Integer.parseInt(inputStream.readLine());
                    outputStream.writeInt(anInt);
                }
                outputStream.close();
            }
            catch(FileNotFoundException e)
            {
                System.out.println("Problem opening file.");
            }
            catch(IOException e)
            {
                System.out.println("Problem with output to the file.");
            }

            try
            {
                ObjectInputStream inputStream2 = new ObjectInputStream(new FileInputStream(fileName));
                System.out.println("The file being read yields:");
                int anInteger = inputStream2.readInt();
                while(anInteger >= 0)
                    {
                        System.out.println(anInteger);
                        anInteger = inputStream2.readInt();
                    }
                inputStream2.close();
            }
            catch(FileNotFoundException e)
            {
                System.out.println("Problem with opening the file.");
            }
            catch(EOFException e)
            {
                System.out.println("Problem reading the file.");
            }
            catch(IOException e)
            {
                System.out.println("There was a problem reading the file.");
            }
    }
}
4

2 に答える 2

2

2番目のループを無限にするミスタイプ(または少なくともミスタイプだったと思います)を見つけるのは困難です。

 (...)
 try
        {
            ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName));
            int anInt = 0;
            while(anInt >=0);  <=====
            {
                anInt = Integer.parseInt(inputStream.readLine());
                outputStream.writeInt(anInt);
            }
            outputStream.close();
        }

これを削除します';' しばらくすると、正常に動作すると思います。

于 2012-11-21T01:24:10.733 に答える
1

その時点でinputStreamが使い果たされて閉じられているため、出力ストリームに書き込んでいません。

最初のファイルの要素を保存するコレクションを作成します。

String inFileName = keys.next();
Collection<String> lines = new ArrayList<String>();
...
System.out.println(inFileString);
lines.add(inFileString);

...
for(String line : lines){
...
    outputStream.write(Integer.parseInt(line));
...
}
于 2012-11-21T01:21:40.123 に答える