2012-11-01 48 views
31

Tôi đang làm việc trên một chương trình Java đọc từng dòng văn bản, mỗi số có một số, đưa mỗi số ném nó vào một mảng, sau đó thử và sử dụng chèn sắp xếp để sắp xếp mảng. Tôi cần trợ giúp để chương trình đọc tệp văn bản.Đọc một tệp .txt bằng cách sử dụng lớp Máy quét trong Java

Tôi nhận được thông báo lỗi sau:

java.io.FileNotFoundException: 10_Random (The system cannot find the file specified) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(Unknown Source) 
at java.util.Scanner.<init>(Unknown Source) 
at insertionSort.main(insertionSort.java:14) 

Tôi có một bản sao của tập tin .txt trong "src" của tôi "bin" và thư mục chính của dự án nhưng nó vẫn không thể tìm thấy tập tin. Tôi đang sử dụng Eclipse bằng cách này.

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class insertionSort { 

public static void main(String[] args) { 

    File file = new File("10_Random"); 

    try { 

     Scanner sc = new Scanner(file); 

     while (sc.hasNextLine()) { 
      int i = sc.nextInt(); 
      System.out.println(i); 
     } 
     sc.close(); 
    } 
    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 
} 
+2

Thử thêm System.err.println (file.getAbsolutePath()); để xem chính xác tệp nào bạn muốn đọc. –

+1

Bạn không mở tệp .txt. – eckes

Trả lời

40

Bạn phải đặt tập tin mở rộng ở đây

File file = new File("10_Random.txt"); 
0

Các tập tin bạn đọc phải có chính xác tên tập tin bạn chỉ định: "10_random" không "10_random.txt" không "10_random.blah", nó phải khớp chính xác với những gì bạn đang yêu cầu. Bạn có thể thay đổi một trong hai để phù hợp để chúng xếp hàng, nhưng chỉ cần chắc chắn rằng họ làm. Nó có thể giúp hiển thị các phần mở rộng tập tin trong bất kỳ hệ điều hành bạn đang sử dụng.

Ngoài ra, đối với vị trí tệp, nó phải được đặt trong thư mục làm việc (cùng cấp) làm tệp thực thi cuối cùng (tệp .class) là kết quả của quá trình biên dịch.

1
  1. Bạn cần chỉ định tên tệp chính xác, bao gồm đuôi tệp, ví dụ: 10_Random.txt.
  2. Tệp cần phải nằm trong cùng thư mục với tệp thực thi nếu bạn muốn tham chiếu đến tệp đó mà không có bất kỳ loại đường dẫn rõ ràng nào.
  3. Khi đang ở đó, bạn cần kiểm tra int trước khi đọc int. Không an toàn khi kiểm tra với hasNextLine() và sau đó mong đợi một int với nextInt(). Bạn nên sử dụng hasNextInt() để kiểm tra xem có thực sự là int để lấy không. Làm thế nào nghiêm chỉnh bạn chọn để thực thi một số nguyên cho mỗi quy tắc dòng là tùy thuộc vào bạn, tất nhiên.
4
  1. Hãy chắc chắn rằng tên tập tin là chính xác (vốn hóa thích hợp, phù hợp với phần mở rộng vv - như đã đề xuất).

  2. Sử dụng Class.getResource phương pháp để xác định vị trí tập tin của bạn trong classpath - không dựa vào thư mục hiện hành:

    URL url = insertionSort.class.getResource("10_Random"); 
    
    File file = new File(url.toURI()); 
    
  3. Xác định đường dẫn tập tin tuyệt đối qua đối số dòng lệnh:

    File file = new File(args[0]); 
    

Trong Eclipse:

  1. Chọn "Chạy cấu hình"
  2. Chuyển đến tab "Đối số"
  3. Đặt "c: /my/file/is/here/10_Random.txt.or của bạn.bất cứ điều gì" vào 'lập luận Chương trình' phần
+0

+1 để đề xuất cả hai cách để xử lý đường dẫn đúng cách và một cách tốt hơn (args) nói chung để thực hiện nhiệm vụ này. Bạn có thể đề cập đến một 'try catch' để xử lý thất bại trong việc mở tệp. –

15

Sử dụng mã sau đây để đọc các tập tin

import java.io.File; 
import java.util.Scanner; 

public class ReadFile { 

    public static void main(String[] args) { 

     try { 
      System.out.print("Enter the file name with extension : "); 

      Scanner input = new Scanner(System.in); 

      File file = new File(input.nextLine()); 

      input = new Scanner(file); 


      while (input.hasNextLine()) { 
       String line = input.nextLine(); 
       System.out.println(line); 
      } 
      input.close(); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

} 

-> Ứng dụng này được in dòng nội dung tập tin bằng dòng

2

Không ai dường như có giải quyết một thực tế rằng bạn không nhập bất cứ điều gì vào một mảng ở tất cả.Bạn đang thiết lập mỗi int được đọc để "i" và sau đó xuất nó.

for (int i =0 ; sc.HasNextLine();i++) 
{ 
    array[i] = sc.NextInt(); 
} 

Một cái gì đó để hiệu ứng này sẽ tiếp tục thiết lập giá trị của mảng để đọc số nguyên tiếp theo.

Loại khác cho vòng lặp có thể hiển thị số trong mảng.

for (int x=0;x< array.length ; x++) 
{ 
    System.out.println("array[x]"); 
} 
1

Đường dẫn tệp Có vẻ là một vấn đề ở đây, hãy đảm bảo rằng tệp tồn tại trong đúng thư mục hoặc cung cấp đường dẫn tuyệt đối để đảm bảo rằng bạn đang trỏ đến tệp chính xác. Vui lòng đăng nhập tệp.getAbsolutePath() để xác minh tệp đó là chính xác.

2

dưới đây là một số phương pháp làm việc và thử nghiệm;

using Scanner

package io; 

import java.io.File; 
import java.util.Scanner; 

public class ReadFromFileUsingScanner { 
    public static void main(String[] args) throws Exception { 
     File file=new File("C:\\Users\\pankaj\\Desktop\\test.java"); 
     Scanner sc=new Scanner(file); 
     while(sc.hasNextLine()){ 
      System.out.println(sc.nextLine()); 
     } 
    } 
} 


Dưới đây là một cách khác để đọc toàn bộ tập tin (không vòng lặp) sử dụng Scanner lớp

package io; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class ReadingEntireFileWithoutLoop { 
    public static void main(String[] args) throws FileNotFoundException { 
     File file=new File("C:\\Users\\pankaj\\Desktop\\test.java"); 
     Scanner sc=new Scanner(file); 
     sc.useDelimiter("\\Z"); 
     System.out.println(sc.next()); 
    } 
} 

sử dụng BufferedReader

package io; 
import java.io.*; 
public class ReadFromFile2 { 
    public static void main(String[] args)throws Exception { 
     File file=new File("C:\\Users\\pankaj\\Desktop\\test.java"); 
     BufferedReader br=new BufferedReader(new FileReader(file)); 
     String st; 
     while((st=br.readLine())!=null){ 
      System.out.println(st); 
     } 
    } 
} 

using FileReader

package io; 
import java.io.*; 
public class ReadingFromFile { 
    public static void main(String[] args) throws Exception { 
     FileReader fr=new FileReader("C:\\Users\\pankaj\\Desktop\\test.java"); 
     int i; 
     while((i=fr.read())!=-1){ 
      System.out.print((char) i); 
     } 
    } 
} 
0

Lúc đầu kiểm tra địa chỉ tập tin, nó phải là bên cạnh tập tin .java của bạn hoặc trong bất kỳ địa chỉ mà bạn xác định trong classpath biến môi trường. Khi bạn kiểm tra điều này, hãy thử dưới đây.

  1. bạn phải sử dụng một tên tập tin bằng cách đó là phần mở rộng trong constructor đối tượng File, như một ví dụ:

    File myFile = new File("test.txt");

  2. nhưng có một cách tốt hơn để sử dụng nó bên trong đối tượng Scanner bởi vượt qua địa chỉ tuyệt đối filename, như một ví dụ:

    Scanner sc = new Scanner(Paths.get("test.txt"));

theo cách này, bạn cũng phải nhập java.nio.file.Paths.

1

private void loadData() {

Scanner scanner = null; 
    try { 
     scanner = new Scanner(new File(getFileName())); 
     while (scanner.hasNextLine()) { 
      Scanner lijnScanner = new Scanner(scanner.nextLine()); 

      lijnScanner.useDelimiter(";"); 
      String stadVan = lijnScanner.next(); 
      String stadNaar = lijnScanner.next(); 
      double km = Double.parseDouble(lijnScanner.next()); 

      this.voegToe(new TweeSteden(stadVan, stadNaar), km); 

     } 
    } catch (FileNotFoundException e) { 
     throw new DbException(e.getMessage(), e); 
    } finally { 
     if(scanner != null){ 
      scanner.close(); 
     } 
    } 
} 
0

Bạn nên sử dụng một trong hai

File file = new File("bin/10_Random.txt"); 

Hoặc

File file = new File("src/10_Random.txt"); 

So với thư mục dự án trong Eclipse.