2010-10-04 33 views
11

Tôi có một tệp văn bản chứa đầy các số và tôi muốn đọc các số trong Java và sau đó tạo danh sách mà tôi có thể sắp xếp. nó đã được một thời gian kể từ khi tôi đã sử dụng java và tôi quên làm thế nào để làm điều này.tạo danh sách ra khỏi tệp văn bản trong java?

tập tin văn bản trông giống như sau

4.5234 
9.3564 
1.2342 
4.4674 
9.6545 
6.7856 
+0

Bằng cách "lập danh sách ra trong số họ", bạn có nghĩa là một datastructure danh sách, hoặc một danh sách trên Swing hoặc giao diện người dùng web? –

+1

@Michael Borgwardt bạn biết quá nhiều :) – ant

Trả lời

3

Bạn làm điều gì đó như thế này.

EDIT: Tôi đã cố gắng triển khai các thay đổi mà dbkk đã đề cập trong nhận xét của anh ấy để mã thực sự chính xác. Cho tôi biết nếu tôi có điều gì sai.

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class ReadList { 

    public static void main(String[] args) throws IOException { 

     BufferedReader in = null; 
     FileReader fr = null; 
     List<Double> list = new ArrayList<Double>(); 

     try { 
      fr = new FileReader("list.txt"); 
      in = new BufferedReader(fr); 
      String str; 
      while ((str = in.readLine()) != null) { 
       list.add(Double.parseDouble(str)); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      in.close(); 
      fr.close(); 
     } 

     for (double d : list) System.out.println(d); 
    } 

} 
+0

Ouch. Không chỉ dài và xấu, mà còn quên đóng tập tin. – dbkk

+0

@dbkk: Bạn nên chú ý khi downvoting cho những thứ như vậy kể từ khi A) Tôi đóng tập tin ...sau khi khối đầu tiên và B) nó chỉ dài vì tôi là một trong những người duy nhất ở đây, những người đã bao quanh các phần cần thiết với một khối try-catch và tôi cũng đã viết một phần đầu ra để anh ta thực sự có thể thấy những gì đang xảy ra rằng nó là dành cho mục đích trình diễn ... –

+5

Luồng đầu vào phải thực sự được đóng trong một 'cuối cùng {}' –

1

hướng dẫn ngắn mà không cần mã:

  1. Tạo một BufferedReader để đọc từ tập tin của bạn.
  2. lặp qua tất cả các dòng tập đọc bởi phù hợp với reader.readLine(), cho đến khi readLine() lợi nhuận null (== cuối tập tin)
  3. Parse mỗi dòng như một Float hoặc Double (ví dụ Float.valueOf(line) hoặc Double.valueOf(line)
  4. Thêm bạn Float hoặc Double đối tượng cho một số ArrayList.
1

Không tính đến thực tế là bạn cần thiết lập xử lý ngoại lệ và dựa trên mã nguồn gốc của bạn, nó sẽ trông một cái gì đó như thế này:

BufferedReader br = new BufferedReader(new FileReader(new File("filename.txt"))); 
ArrayList<Double> ald = new ArrayList<Double>(); 
String line; 
while(true) 
{ 
    line = br.readLine(); 
    if(line == null) break; 
    ald.add(new Double(line)); 
} 
10

Bạn có thể sử dụng một Scanner trên File và sử dụng nextDouble() hoặc nextFloat() phương pháp.

Scanner scanner = new Scanner(new File("pathToYourFile")); 
List<Double> doubles = new ArrayList<Double>(); 
while(scanner.hasNextDouble()){ 
    doubles.add(scanner.nextDouble()); 
} 
Collections.sort(doubles); 

Resources:

+0

Để rất thông thái: OP yêu cầu danh sách, không phải bộ sưu tập :-P – DerMike

+2

@DerMike, bạn nói đúng;) Đó là danh sách ở cuối, nhưng không thể sắp xếp bộ sưu tập, tôi sẽ chỉnh sửa mã. –

2

Đây là thực sự thú vị và đơn giản nếu bạn sử dụng Guava:

final File f = new File("your/file.txt"); 
final List<Float> listOfFloats = 
    Lists.transform(Files.readLines(f, Charset.defaultCharset()), 
     new Function<String, Float>(){ 

      @Override 
      public Float apply(final String from){ 
       return Float.valueOf(from); 
      } 
     }); 

Và đây là một phiên bản tương tự như sử dụng Apache Commons/IO:

final File f = new File("your/file.txt"); 
final List<String> lines = FileUtils.readLines(f); 
final List<Float> listOfFloats = new ArrayList<Float>(lines.size()); 
for(final String line : lines){ 
    listOfFloats.add(Float.valueOf(line)); 
} 
1

Sử dụng java.util.Scanner:

public List<Doubles> getNumbers(String fileName) { 
    List<Double> numbers = new ArrayList<Double>(); 
    Scanner sc = new Scanner(new File(fileName)); 

    while (sc.hasNextDouble()) { 
     numbers.add(sc.nextDouble()); 
    } 

    return numbers; 
} 
Các vấn đề liên quan