2009-10-24 7 views
2

J'ai un problème Java. J'essaie de lire un fichier txt qui a un nombre variable d'entiers par ligne, et pour chaque ligne je dois additionner chaque second entier! J'utilise le scanner pour lire des entiers, mais je ne peux pas travailler quand une ligne est faite. Quelqu'un peut-il aider les pls?Problème de lecture de fichier Java

+0

Complétez votre question en ajoutant votre code. –

+1

sonne comme des devoirs? – Jorn

Répondre

2

jetez un oeil à la classe BufferedReader pour lire un fichier texte et à la classe StringTokenizer pour scinder chaque ligne en chaînes.

String input; 
BufferedReader br = new BufferedReader(new FileReader("foo.txt")); 
while ((input = br.readLine()) != null) { 
    input = input.trim(); 
    StringTokenizer str = new StringTokenizer(input); 
    String text = str.nextToken(); //get your integers from this string 
} 
0

Si je vous, je serais probablement utiliser FileUtils classe de Apache Commons IO. La méthode readLines(File file) renvoie une liste de chaînes, une pour chaque ligne. Ensuite, vous pouvez simplement gérer une ligne à la fois.

Quelque chose comme ceci:.

File file = new File("test.txt"); 
    List<String> lines = FileUtils.readLines(file); 
    for (String line : lines) { 
     // handle one line 
    } 

(Malheureusement Commons IO ne prend pas en charge les médicaments génériques, ainsi il n'y aurait un avertissement d'affectation sans contrôle lors de l'attribution à la liste < chaîne > Pour remédier à cette utilisation soit @SuppressWarnings , ou tout simplement une liste typées et casting à cordes.)

C'est peut-être un exemple d'une situation où l'on peut appliquer « know and use the libraries » et passez par écrit un certain niveau inférieur code boilerplate tout à fait.

+0

c'est au détriment d'encourir le coût de l'inclusion de la lib jar ... même si je suis d'accord si vous le pouvez, vous devriez essayer d'utiliser les bibliothèques de domaines publics. – zeroin23

+0

Oui, si c'était la seule chose dont vous auriez besoin de Commons IO, peut-être que cela ne vaudrait pas la peine. Mais les librairies Apache Commons (et par exemple les collections Google) ont généralement beaucoup de choses utiles pour votre projet. – Jonik

0

ou racler de communes l'essentiel à la fois d'apprendre une bonne technique et sauter le pot:

import java.io.*; 
import java.util.*; 

class Test 
{ 
    public static void main(final String[] args) 
    { 

     File file = new File("Test.java"); 

     BufferedReader buffreader = null; 
     String line = ""; 

     ArrayList<String> list = new ArrayList<String>(); 

     try 
      { 
       buffreader = new BufferedReader(new FileReader(file)); 
       line = buffreader.readLine(); 
       while (line != null) 
       { 
        line = buffreader.readLine(); 
        //do something with line or: 
        list.add(line); 
       } 
      } catch (IOException ioe) 
      { 
        // ignore 
      } finally 
      { 
       try 
       { 
        if (buffreader != null) 
        { 
        buffreader.close(); 
        } 
       } catch (IOException ioe) 
       { 
        // ignore 
       } 

      } 

      //do something with list 
      for (String text : list) 
      {  
       // handle one line 
       System.out.println(text);  
      } 

    } 
} 
0

C'est la solution que j'utiliser.

import java.util.ArrayList; 
import java.util.Scanner; 
public class Solution1 { 

    public static void main(String[] args) throws IOException{ 
     String nameFile; 
     File file; 
     Scanner keyboard = new Scanner(System.in); 
     int total = 0; 

     System.out.println("What is the name of the file"); 

     nameFile = keyboard.nextLine(); 
     file = new File(nameFile); 

     if(!file.exists()){ 
      System.out.println("File does not exit"); 
      System.exit(0); 
     } 


     Scanner reader = new Scanner(file); 
     while(reader.hasNext()){ 
      String fileData = reader.nextLine(); 
      for(int i = 0; i < fileData.length(); i++){ 
       if(Character.isDigit(fileData.charAt(i))){ 
        total = total + Integer.parseInt(fileData.charAt(i)+""); 
       } 

      } 
      System.out.println(total + " \n"); 
     } 

    } 

}