1

テキストファイルから整数を読み取り、その合計を出力ファイルに出力する簡単なプログラムを作成しようとしています。私が得ている唯一のエラーは、38行目のcatchブロックにあります。「未解決のコンパイルの問題:ファイルを解決できません」。「file」は入力ファイルオブジェクトの名前であることに注意してください。この例外ブロックをコメントアウトすると、プログラムは正常に実行されます。アドバイスをいただければ幸いです。

import java.io.*;
import java.util.Scanner;

public class ReadWriteTextFileExample 
{
    public static void main(String[] args) 
    {
        int num, sum = 0;

        try
        {
            //Create a File object from input1.txt
            File file = new File("input1.txt");
            Scanner input = new Scanner(file);

            while(input.hasNext())
            {
            //read one integer from input1.txt
                num = input.nextInt();
                sum += num;
            }
            input.close();  

        //create a text file object which you will write the output to
        File output1 = new File("output1.txt");
        //check whether the file's name already exists in the current directory
        if(output1.exists())
        {
            System.out.println("File already exists");
            System.exit(0);
        }
        PrintWriter pw = new PrintWriter(output1);
        pw.println("The sum is " + sum);
        pw.close();
    }
    catch(FileNotFoundException exception)
    {
        System.out.println("The file " + file.getPath() + " was not found.");
    }
    catch(IOException exception)
    {
        System.out.println(exception);
    }
}//end main method
}//end ReadWriteTextFileExample
4

2 に答える 2

4

file変数はtryブロック内で宣言されます。catchブロックの範囲外です。(この場合は発生しませんが、実行が変数宣言に達する前に例外がスローされた場合を想像してください。基本的にcatch、対応するブロックで宣言されているブロック内の変数にアクセスすることはできませんtry。)

代わりに、tryブロックのに宣言する必要があります。

File file = new File("input1.txt");
try
{
    ...
}
catch(FileNotFoundException exception)
{
    System.out.println("The file " + file.getPath() + " was not found.");
}
catch(IOException exception)
{
    System.out.println(exception);
}
于 2013-03-02T21:44:12.480 に答える
3

Javaのスコープはブロックに基づいています。ブロック内で宣言する変数は、同じブロックが終了するまでスコープ内にのみ存在します。

try 
{ // start try block
    File file = ...;

} // end try block
catch (...) 
{ // start catch block

  // file is out of scope!

} // end catch block

fileただし、ブロックの前に宣言するtryと、スコープ内に残ります。

File file = ...;

try 
{ // start try block


} // end try block
catch (...) 
{ // start catch block

  // file is in scope!

} // end catch block
于 2013-03-02T21:45:04.613 に答える