2013-04-02 2 views
1

Создание программы, которая будет записывать данные из списка массивов в текстовый файл, и я испытываю этот FileNotFoundException, хотя файл существует. В то же время вычисленные данные из моего массива не записываются в него.Решение 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; 
    } 
+0

Где в файловой системе находится payroll.txt? – jsedano

+0

@anakata это в моей рабочей области, расположенной в папке проекта. даже я не указал местоположение файла txt, он будет написан в этом месте, я прав? – NewInJava

+0

Не могли бы вы предоставить нам трассировку стека - переплетение кода, который выводится при возникновении исключения? Кроме того, имена путей относятся к расположению файла '.class' - укажите, где это находится, и переместите файл соответствующим образом. – MathSquared

ответ

0

Когда я взял ваш код и немного изменил его, это сработало. Обязательно используйте параметр filename, который передается вашему методу, прямо сейчас вы жестко программируете его в методе.

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

Имма попробуйте. надеюсь, что это работает на моем – NewInJava

+0

, поэтому я должен удалить 'br = new BufferedReader (новый FileReader (« payroll.txt »));' и заменить его на это право? – NewInJava

+0

Да, последняя строка в моем примере должна заменить это. – syb0rg

1

Вашего файл с открытым заявлением:

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

не использует переменное имя файла, который вы передаёте в метод.

Понадобится:

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

Вы также можете использовать объект File вместо этого.

+0

«Строка», которая передается функции, может по-прежнему указывать на неправильное расположение файла. Используя значение параметра вместо того, что использует OP, я сомневаюсь, что что-то исправит. – syb0rg

+0

Я пробовал это и до сих пор получил ту же ошибку – NewInJava

+1

Это не так. Это очевидная ошибка в коде OP, и она действительно может ответить на вопрос. Если это не так, потому что OP ошибочен и файл не существует. – EJP

0

Возможно, вам необходимо убедиться, что файл находится в нужном месте. Пути относятся к местоположению файла .class. Например, «payroll.txt» относится к «C:\path\to\class\file\payroll.txt».

Кроме того, переконфигурируйте BufferedReader, чтобы использовать параметр filename, как указывали другие.

Не просто создавать файл в программе; это просто маскирует проблему, которая является файлом, хранящимся не в том месте. Вы можете использовать это для тестирования, чтобы найти, куда должен идти файл, но затем удалите эту строку и просто поместите файл, который вам нужно использовать.