Я хочу разобрать несколько строк в переменные из файла .txt в Java.Какой самый простой способ сделать это? - PullRequest
0 голосов
/ 20 июля 2010

Какой лучший способ сделать это?Должен ли я использовать класс File и сканер?Я никогда не делал этого раньше и, похоже, не могу найти надежного руководства для этого в Интернете, поэтому я решил спросить здесь.

Редактировать:
Текстовый файл, который я анализирую, состоит из 3 столбцов,первые три - ИМЯ ИМЯ РОЖДЕНИЯ, затем фактические данные.

Редактировать (код из pastie ):

public void readFromFile(File file ) 
{
    try
    {
        System.out.println("success..");
        s = new Scanner(file);
        BufferedReader input = new BufferedReader(new FileReader(file));
        String jj = null;
        while((jj = input.readLine())!=null)
        {  
            String [] words = jj.split("\\t");
            String name = "";
            String id = "";
            String birthdate ="";
            for (int i = 3; i<words.length; i+=3)
            {
                id =words[i];
                name = words[i+1];
                birthdate=words[i+2];
                Person p = new Person(id, name, birthdate);
                peopleMap.put(p.id,p);
                names.add(p);
                System.out.println("New entry added to file: "+name+"\\t"+"ID: "
                                    +id+"\\t"+"Birthdate"+birthdate);
            }
        }
    }

    catch(IOException e)
    {
    }
}

Ответы [ 4 ]

2 голосов
/ 20 июля 2010

Самый простой способ зависит от формата текстового файла. Из вашего другого комментария звучит так, что строки - это значения, разделенные табуляцией. Как новичок вы, вероятно, найдете самый простой в использовании сканер. В частности, Scanner.nextLine (). Соедините это с использованием String.split ("\ t") для разделения данных в массив (при условии, что формат разделен табуляцией-значениями).

2 голосов
/ 20 июля 2010

Просто зависит от формата текстового файла.

  1. Если это простая пара имя-значение, вы можете использовать java.util.Properties.например, a.properties может выглядеть так:

    name=john
    city=san jose
    date=12 july 2010
    

, тогда вы можете загрузить это как:

Properties props = new Properties();
props.load(new FileInputStream("a.properties"));

Если формат отличается от того, который поддерживается java.util.Properties.load (), тогда полезно использовать java.util.Scanner, чтобы обрабатывать его построчно:

File file = new File("data.txt");
try 
{
    Scanner scanner = new Scanner(file);
    while (scanner.hasNextLine()) 
    {
        String line = scanner.nextLine();
        //Process each line seperately
        processLine(line);
    }
} catch (FileNotFoundException e) 
{
    e.printStackTrace();
}
1 голос
/ 20 июля 2010

Если вы можете сказать, каков синтаксис / структура текстового файла, подумайте о том, чтобы сделать его файлом свойств Java.Затем вы можете загрузить и сохранить файл с минимальными усилиями по программированию, используя класс java.util.Properties.

0 голосов
/ 21 июля 2010

Вот что мне нравится делать в этой ситуации:

Scanner s = new Scanner(file);
Scanner line;
String name;
String date;
int id;
while(s.hasNext()){
   line = new Scanner(s.nextLine());
   id = line.nextInt();
   name = line.next/*String*/();
   date = line.next/*String*/();
   /* Do something with id, name and date */
}

Может быть, есть какая-то обработка исключений или что-то в этом роде

(Кто-нибудь хочет прокомментировать эффективность создания многих новых сканеров?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...