1

配列リストからテキスト ファイルにデータを書き込むプログラムを作成してFileNotFoundExceptionいますが、ファイルが存在するにもかかわらず、これが発生しています。同時に、配列から計算されたデータは書き込まれません。

これは私のコードです:

 public static void payrollReadFromFile(String filename) {

        // initializes br identifer as BufferedReader.
        BufferedReader br = null;

        payrolls.clear(); // removes all elements in arraylist employees

        try {

            br = new BufferedReader(new FileReader("payroll.txt")); 
            try {

                 String name;               
                double   gincome, nincome, deduc, sss, pagibig, 
phil = 0; // initialize identifiers

                // reads each line through br identifier, and 
stores it on
                // temporary identifiers
                // loop continues until null is encountered
            while ((name = br.readLine()) != null) {

                    gincome = Double.parseDouble(br.readLine());
                    sss = Double.parseDouble(br.readLine());
                    pagibig = 
Double.parseDouble(br.readLine());
                    phil = Double.parseDouble(br.readLine());
                    deduc = Double.parseDouble(br.readLine());
                    nincome = 
Double.parseDouble(br.readLine());                    

                    // adds the data to payroll arraylist
                    payrolls.add(new Person( name, gincome, 
sss, pagibig, phil,deduc, nincome));
                }
            } finally {
                br.close(); // closes BufferedReader
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    // method which writes data into parameter 'filename'
    // uses PrintWriter and FileWriter
    public static boolean payrollWriteToFile(String filename) {
        boolean saved = false;
        PrintWriter pw = null; // pw is a PrintWriter identifier

        try {
            // instantiate pw as PrintWriter, FileWriter
            pw = new PrintWriter(new FileWriter("payroll.txt")); 

            try {

                // for each loop. each data from payrolls is     
written to parameter

                for (Person payroll : payrolls) {

                    pw.println(payroll.getName());
                    pw.println(payroll.getGincome());
                    pw.println(payroll.getSss());
                    pw.println(payroll.getPagibig());
                    pw.println(payroll.getPhil());
                    pw.println(payroll.getDeduc());
                    pw.println(payroll.getNincome());


                }
                saved = true;
            } finally {
                pw.close();
            }
        } catch (IOException e) {

            e.printStackTrace();
        }
        return saved;
    }
4

3 に答える 3

1

あなたのファイルオープンステートメント:

   br = new BufferedReader(new FileReader("payroll.txt")); 

メソッドに渡した変数ファイル名を使用していません。

必要なもの:

   br = new BufferedReader(new FileReader(filename)); 

代わりに File オブジェクトを使用することもできます。

于 2013-04-02T23:09:26.693 に答える
0

あなたのコードを少し修正したところ、うまくいきました。メソッドに渡されるパラメーターを必ず使用しfilenameてください。現在、メソッドでハードコーディングしています。

File file = new File(filename);
if (!file.exists()) file.createNewFile();
br = new BufferedReader(new FileReader(file));
于 2013-04-02T23:34:21.753 に答える
0

ファイルが正しい場所にあることを確認する必要がある場合があります。パスは、.classファイルの場所に相対的です。たとえば、「payroll.txt」は「 」を指しC:\path\to\class\file\payroll.txtます。

また、他の人が指摘しているように、パラメーターBufferedReaderを使用するように再構成してください。filename

プログラムでファイルを作成するだけではありません。これは、間違った場所にファイルが保存されているという問題を隠しているだけです。これをテストに使用して、ファイルの移動先を見つけることができますが、その行を削除して、使用する必要のあるファイルをそこに配置するだけです。

于 2013-04-08T22:50:11.703 に答える