2013-09-18 5 views
1

У меня есть текстовый файл, в следующем формате:мне нужно, чтобы получить читателя файл, чтобы прочитать текстовый файл построчно и форматировать их в Java

Han Solo:1000 
Harry:100 
Ron:10 
Yoda:0 

мне нужно сделать ArrayList объектов, магазин имя игрока (Han Solo) и их оценка (1000) в качестве атрибутов. Я хотел бы иметь возможность сделать этот массивList, читая файл строки за строкой и разбивая строку, чтобы получить нужные атрибуты. Я пробовал использовать объект Scanner, но не зашел далеко. Любая помощь по этому поводу будет очень признательна, спасибо.

+2

Просьба указать код, который вы попробовали и о котором идет речь. –

+2

Это дубликат. Пожалуйста, ищите заранее. http://stackoverflow.com/questions/5343689/java-reading-a-file-into-an-arraylist – thepratt

ответ

1

Вы можете создать вызов класса player. playerName и score будут атрибутами.

public class Player { 
    private String playerName; 
    private String score; 
    // getters and setters 
} 

Тогда вы можете создать List

List<Player> playerList=new ArrayList<>(); 

Теперь вы можете попытаться сделать вашу задачу.

Кроме того, вы можете прочитать из файла и split каждой строки по : и поставить первую часть, как playerName и второй части, как score.

List<Player> list=new ArrayList<>(); 
    while (scanner.hasNextLine()){ 
     String line=scanner.nextLine(); 
     Player player=new Player(); 
     player.setPlayerName(line.split(":")[0]); 
     player.setScore(line.split(":")[1]); 
     list.add(player); 
    }  
+0

Статический метод в Player, такой как valueOf (String), тоже будет приятным (вдохновленный Integer.valueOf) –

1

Вы можете иметь Player класс как это: -

class Player { // Class which holds the player data 
    private String name; 
    private int score; 

    public Player(String name, int score) { 
     this.name = name; 
     this.score = score; 
    } 

    // Getters & Setters 
    // Overrride toString() - I did this. Its optional though. 
} 

и вы можете разобрать ваш файл, который содержит данные, как это: -

List<Player> players = new ArrayList<Player>(); 
try { 
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt"))); // I used BufferedReader instead of a Scanner 
    String line = null; 
    while ((line = br.readLine()) != null) { 
     String[] values = line.split(":"); // Split on ":" 
     players.add(new Player(values[0], Integer.parseInt(values[1]))); // Create a new Player object with the values extract and add it to the list 
    } 
} catch (IOException ioe) { 
    // Exception Handling 
} 
System.out.println(players); // Just printing the list. toString() method of Player class is called. 
1

Если у вас есть объект:

public class User 
{ 
    private String name; 
    private int score; 

    public String getName() 
    { 
     return name; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 

    public int getScore() 
    { 
     return score; 
    } 

    public void setScore(int score) 
    { 
     this.score = score; 
    } 

} 

Сделать класс чтения, который считывает из файла:

public class Reader 
{ 
    public static void main(String[] args) 
    { 
     List<User> list = new ArrayList<User>(); 
     File file = new File("test.txt"); 
     BufferedReader reader = null; 
     try 
     { 
      reader = new BufferedReader(new FileReader(file)); 
      String line; 
      while ((line = reader.readLine()) != null) 
      { 
       String[] splitedString = line.split(":"); 
       User user = new User(); 
       user.setName(splitedString[0]); 
       user.setScore(Integer.parseInt(splitedString[1])); 
       list.add(user); 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      if (reader != null) 
      { 
       try 
       { 
        reader.close(); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 

     for (User user : list) 
     { 
      System.out.println(user.getName()+" "+user.getScore()); 
     } 
    } 
} 

Выход будет:

Han Solo 1000 Harry 100 Рон 10 Yoda 0

0

Предположим, у вас есть класс Игрок который состоит из двух элементов данных - имя тип String и оценка тип int.

List<Player> players=new ArrayList<Player>(); 
     BufferedReader br=null; 
     try{ 
      br=new BufferedReader(new FileReader("filename")); 
      String record; 
      String arr[]; 
      while((record=br.readLine())!=null){ 
       arr=record.split(":"); 
       //Player instantiated through two-argument constructor 
       players.add(new Player(arr[0], Integer.parseInt(arr[1]))); 
      } 
     } catch (FileNotFoundException e) {    
      e.printStackTrace(); 
     } catch (IOException e) {    
      e.printStackTrace(); 
     } 
     finally{ 
      if(br!=null) 
       try { 
        br.close(); 
       } catch (IOException e1) {      
        e1.printStackTrace(); 
       } 
     } 
0

Для небольших файлов (менее 8 Кбайт), вы можете использовать этот

import java.io.IOException; 
import java.nio.charset.StandardCharsets; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.List; 

public class NameScoreReader { 

List<Player> readFile(final String fileName) throws IOException 
{ 
    final List<Player> retval = new ArrayList<Player>(); 

    final Path path = Paths.get(fileName); 
    final List<String> source = Files.readAllLines(path, StandardCharsets.UTF_8); 
    for (final String line : source) { 
     final String[] array = line.split(":"); 
     if (array.length == 2) { 
      retval.add(new Player(array[0], Integer.parseInt(array[1]))); 
     } else { 
      System.out.println("Invalid format: " + array); 
     } 
    } 
    return retval; 
} 


class Player { 

    protected Player(final String pName, final int pScore) { 
     super(); 
     this.name = pName; 
     this.score = pScore; 
    } 

    private String name; 

    private int score; 

    public String getName() 
    { 
     return this.name; 
    } 
    public void setName(final String name) 
    { 
     this.name = name; 
    } 

    public int getScore() 
    { 
     return this.score; 
    } 
    public void setScore(final int score) 
    { 
     this.score = score; 
    } 

} 

}

0

Прочитайте файл и преобразовать его в строку и расщепленной функции вы можете подать заявление на результат.

public static String getStringFromFile(String fileName) { 
     BufferedReader reader; 
     String str = ""; 
     try { 
      reader = new BufferedReader(new FileReader(fileName)); 
      String line = null; 
      StringBuilder stringBuilder = new StringBuilder(); 
      while ((line = reader.readLine()) != null) { 
       stringBuilder.append(line); 
       stringBuilder.append("\n"); 
      } 
       str = stringBuilder.toString(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return str; 
     } 

    public static void main(String[] args) { 
     String stringFromText = getStringFromFile("C:/DBMT/data.txt"); 
     //Split and other logic goes here 
    } 
Смежные вопросы