创建一个程序,将数据从数组列表写入文本文件,即使文件存在,我也遇到了这个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;
    }

最佳答案

当我拿起您的代码并对其进行了一些修改时,此方法起作用了。确保使用传递给您的方法的参数filename,现在您正在对其进行硬编码。

File file = new File(filename);
if (!file.exists()) file.createNewFile();
br = new BufferedReader(new FileReader(file));

08-28 20:56