将文件读取文件添加到java中的数组列表中

时间:2012-11-14 20:03:57

标签: java arraylist

我无法将文件中的文本读取到数组列表中。

我的文字如下:

438;MIA;JFK;10:55;1092;447
638;JFK;MIA;19:45;1092;447
689;ATL;DFW;12:50;732;448 etc...

我的代码如下所示:

package filesexample;
import java.io.*;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.ArrayList;
/**
*
* @author 
*/
public class FilesExample {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {

    File file = new File ("/Schedule.txt");

    try
    {
        Scanner scanner= new Scanner(file);;

        while (scanner.hasNextLine())
        {
            String line = scanner.nextLine();
            Scanner lineScanner= new Scanner(line);
            lineScanner.useDelimiter(";");
            while(lineScanner.hasNext()){
            String part = lineScanner.next();
            System.out.print(part + " ");
        }

          System.out.println();          




        }

    }catch (FileNotFoundException e){
            e.printStackTrace();
        }
    }
}

非常感谢您对入门的一些帮助,谢谢!

4 个答案:

答案 0 :(得分:0)

您无需执行以下操作

Scanner lineScanner= new Scanner(line);
lineScanner.useDelimiter(";");

只做

String[] parts = line.split(";");

答案 1 :(得分:0)

使用String.split(delimiter)拆分字符串。

List<String> list = new ArrayList<String>();
    while (scanner.hasNextLine())
            {
                String line = scanner.nextLine();
                String[] strArr = line.split(";");
                for(String s: strArr){
                 list.add(s); //adding a string into the list
                 System.out.println(s +  " ");
                }
                }

              System.out.println();     

编辑:来自您的评论

  我发布的文字

,第一个数字是航班号,出发地,目的地,时间,里程和价格。他们都需要   每个类别都有自己的数组,所以航班号需要自己的   数组,自己的数组等。

你不需要每个属性的数组。创建一个类并将其命名为 Filght 。并将您的属性设为实例变量。

class Flight {
private long filghtNo;
private String origin;
private dest;
private Date time;
private long miles;
private double price;
//setters and getters
}

   List<Flight> list = new ArrayList<Flight>();
    Flight flight = new Flight();
    while (scanner.hasNextLine())
            {
                String line = scanner.nextLine();
                Scanner scan = new Scanner(line);
                if(scan.hasNextLong()){
                 flight.setFilgthNo(scan.nextlong());
                  }
                else if // do the  same for other properties
                }

     list.add(flight);

这种方式更像面向对象

答案 2 :(得分:0)

  

他们都需要为每个类别都有自己的阵列,所以飞行   number将需要自己的数组,原点是自己的数组

我会说,不要。您不需要为每个数组分别使用单独的数组。

我希望创建一个带有属性的class: - flight number, origin, destination, time, miles and price

现在对于每一行,我只是将它拆分为;,并在类中有一个构造函数,它将数组作为参数。而不是为每个参数分别设置ArrayList,我会得到该类实例的ArrayList

class Flight {
    private int flightNumber;
    private String origin;
    private String destination;
    ... so on for `time, miles and price`

    public Flight(String[] attr) {
        this.flightNumber = Integer.parseInt(attr[0]);
        this.origin = attr[1];
        this.destination = attr[2];
        ... so on.
    }
}

然后你在哪里使用: -

Scanner lineScanner = new Scanner(line);
lineScanner.useDelimiter(";");

我会使用String#split()获取单个属性,然后创建ArrayList<Flight>,并向其添加Flight个实例: -

List<Flight> flights = new ArrayList<Flight>();

while (scanner.hasNextLine()) {
     String line = scanner.nextLine();
     String[] attributes = line.split(";");
     flights.add(new Flight(attributes));
} 

注意: -

您可以改进实例化Flight类的方式,以及如何设置不同的属性。由于您的属性属于不同的类型,并且它们位于String form,因此您需要使用conversionString to Integer中相应的String to double,我在这里没有考虑过。< / p>

答案 3 :(得分:0)

我重新考虑了对更多OO方法的需求,但这就是您所要求的内容。

public final class FlightInfoParser {

  private static final String[] EMPTY_STRING_ARRAY = new String[]{};

  public static void main(String[] args) throws IOException {
    BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

    List<String> flightNumbersList = new ArrayList<String>();
    List<String> originsList = new ArrayList<String>();
    List<String> destinationsList = new ArrayList<String>();
    List<String> departureTimesList = new ArrayList<String>();
    List<Integer> milesList = new ArrayList<Integer>();
    List<Double> pricesList = new ArrayList<Double>();

    String line;
    while ((line = r.readLine()) != null) {
        String[] fields = line.split(";");
        flightNumbersList.add(fields[0]);
        originsList.add(fields[1]);
        destinationsList.add(fields[2]);
        departureTimesList.add(fields[3]);
        milesList.add(Integer.parseInt(fields[4]));
        pricesList.add(Double.parseDouble(fields[5]));
    }

    String[] flightNumbersArray = flightNumbersList.toArray(EMPTY_STRING_ARRAY);
    String[] originsArray = originsList.toArray(EMPTY_STRING_ARRAY);
    String[] destinationsArray = destinationsList.toArray(EMPTY_STRING_ARRAY);
    String[] departureTimesArray = departureTimesList.toArray(EMPTY_STRING_ARRAY);

    int[] milesArray = new int[milesList.size()];
    for (int i = 0, len = milesArray.length; i < len; ++i) {
        milesArray[i] = milesList.get(i);
    }

    double[] pricesArray = new double[pricesList.size()];
    for (int i = 0, len = pricesArray.length; i < len; ++i) {
        pricesArray[i] = pricesList.get(i);
    }

  }

}