2013-04-02 3 views
1

Création d'un programme qui va écrire les données de la liste de tableau dans un fichier texte et je rencontre ce FileNotFoundException même si le fichier existe. En même temps, les données calculées de mon tableau ne lui sont pas écrites.Solution FileNotFoundException?

Ceci est mon code:

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

Où se trouve le fichier payroll.txt dans le système de fichiers? – jsedano

+0

@anakata il est dans mon espace de travail situé dans son dossier de projet. Même si je n'ai pas spécifié l'emplacement du fichier txt, il sera écrit à cet endroit, ai-je raison? – NewInJava

+0

Pourriez-vous s'il vous plaît nous donner la trace de la pile - le fouillis de code qui imprime quand une exception se produit? En outre, les noms de chemin sont relatifs à l'emplacement du fichier '.class' - déterminez l'emplacement et déplacez votre fichier en conséquence. – MathSquared

Répondre

0

Lorsque j'ai pris votre code et que je l'ai modifié un peu, cela a fonctionné. Assurez-vous d'utiliser le paramètre filename qui est transmis à votre méthode, vous le codifiez en dur dans la méthode.

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

imma l'essayer. J'espère que cela fonctionne sur le mien à – NewInJava

+0

alors je devrais supprimer 'br = new BufferedReader (nouveau FileReader (" payroll.txt "));' et le remplacer par ce droit? – NewInJava

+0

Oui, la dernière ligne de mon exemple devrait remplacer cela. – syb0rg

1

Votre fichier ouvert déclaration:

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

n'utilise pas le nom de variable que vous avez passé dans la méthode.

Vous devez:

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

Vous pouvez également utiliser l'objet fichier à la place.

+0

La chaîne 'String' transmise à la fonction peut toujours indiquer le mauvais emplacement du fichier. En utilisant la valeur du paramètre à la place de ce que l'OP utilise maintenant, je doute que cela corrige quoi que ce soit. – syb0rg

+0

j'ai essayé cela et toujours eu la même erreur – NewInJava

+1

Ce n'est pas faux. C'est une erreur évidente dans le code OP et cela peut effectivement répondre à la question. Si ce n'est pas le cas, c'est parce que le PO est faux et le fichier n'existe pas. – EJP

0

Vous devrez peut-être vous assurer que le fichier est au bon endroit. Les chemins sont relatifs à l'emplacement du fichier .class. Par exemple, "payroll.txt" fait référence à "C:\path\to\class\file\payroll.txt".

De même, reconfigurez le BufferedReader pour utiliser le paramètre filename, comme d'autres l'ont indiqué.

Ne créez pas simplement un fichier dans le programme; c'est juste masquer le problème, qui est un fichier stocké au mauvais endroit. Vous pouvez l'utiliser pour tester où trouver le fichier, mais supprimez cette ligne et placez simplement le fichier que vous avez besoin d'utiliser.