Проблема чтения файла Java - PullRequest
       7

Проблема чтения файла Java

2 голосов
/ 24 октября 2009

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

Ответы [ 4 ]

2 голосов
/ 24 октября 2009

взгляните на класс 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 голосов
/ 16 сентября 2017

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

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

    }

}
0 голосов
/ 28 октября 2009

или соскоблите с обычных вещей, чтобы выучить хорошую технику и пропустить банку:

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 голосов
/ 24 октября 2009

На вашем месте я бы, вероятно, использовал 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 не поддерживает генерики, поэтому при назначении в List * будет выдано предупреждение о непроверенном назначении. Чтобы исправить это, используйте @SuppressWarnings или просто нетипизированный List и приведение к Strings .)

Это, возможно, пример ситуации, когда можно применить " знать и использовать библиотеки " и вообще пропустить написание какого-то стандартного кода низкого уровня.

...