2009-10-24 4 views
2

У меня проблема с java. Я пытаюсь прочитать txt-файл, который имеет переменное число целых чисел в строке, и для каждой строки мне нужно суммировать каждое второе целое число! Я использую сканер для чтения целых чисел, но не могу работать, когда выполняется строка. Может ли кто-нибудь помочь PLS?Проблема чтения файла Java

+0

Заполните вопрос, добавив свой код. –

+1

звучит как домашнее задание? – Jorn

ответ

2

посмотреть класс BufferedReader для чтения текстового файла и в классе StringTokenizer для разделения каждой строки на строки.

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

Если бы я тебя, я бы, вероятно, использовать FileUtils класс от Apache Commons IO. Метод readLines(File file) возвращает список строк, по одному для каждой строки. Затем вы можете просто обрабатывать одну строку за раз.

Что-то вроде этого:.

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

(К сожалению Commons IO не поддерживает дженерик, так что было бы неконтролируемое предупреждение назначения при назначении Перечислите < Строки > Для исправления, которые используют либо @SuppressWarnings , или просто нетипизированный список и литье к строкам.)

Это, пожалуй, пример ситуации, когда можно применить «know and use the libraries» и вообще пропустить код шаблона нижнего уровня.

+0

это за счет расходов на включение jar lib ... хотя я согласен, если вы можете попытаться использовать библиотеки общедоступных доменов. – zeroin23

+0

Да, если бы это была * единственная вещь, которая вам нужна из Commons IO, возможно, это было бы неважно. Но, как правило, у Apache Commons libs (и, например, Google Collections) много полезного для вашего проекта. – Jonik

0

или скрести от достоянию первой необходимости в обоих узнать хорошую технику и пропустить баночку:

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

Это решение, которое я хотел бы использовать.

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"); 
     } 

    } 

} 
Смежные вопросы