FileNotFoundException解决方案?

时间:2013-04-02 23:01:53

标签: java filenotfoundexception filewriter printwriter

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

3 个答案:

答案 0 :(得分:1)

你的文件公开声明:

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

未使用您传递给方法的变量filename。

你需要:

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

您可能还想使用File对象。

答案 1 :(得分:0)

当我接受你的代码并稍微修改它时,这很有效。确保使用传递给您的方法的参数filename,现在您正在方法中对其进行硬编码。

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

答案 2 :(得分:0)

您可能需要确保文件位于正确的位置。路径相对于.class文件的位置。例如,“payroll.txt”表示“C:\path\to\class\file\payroll.txt”。

此外,请重新配置BufferedReader以使用filename参数,正如其他人指出的那样。

不要只是在程序中创建文件;这只是掩盖问题,这是一个存储在错误位置的文件。您可以使用它进行测试以找到文件的位置,然后删除该行,然后放置您需要在那里使用的文件。