2009-09-26 38 views
50

Tôi muốn một chương trình java đọc tên người dùng được chỉ định từ thư mục hiện tại (cùng thư mục chứa tệp .class).Java, đọc tệp từ thư mục hiện tại?

Nói cách khác, nếu người dùng chỉ định tên tập tin là "myfile.txt", và tập tin đó đã có trong thư mục hiện hành:

reader = new BufferedReader(new FileReader("myFile.txt")); 

không hoạt động. Tại sao?

Tôi đang chạy nó trong cửa sổ.

+1

Đây là cùng trong Linux quá –

Trả lời

37

Thư mục hiện tại không nhất thiết là thư mục tệp .class đang ở. Đó là thư mục làm việc của quy trình. (ví dụ: thư mục bạn đã sử dụng khi bạn khởi động JVM)

Bạn có thể tải các tệp từ cùng thư mục với tệp .class với getResourceAsStream(). Điều đó sẽ cung cấp cho bạn một InputStream mà bạn có thể chuyển đổi sang Reader với InputStreamReader.

+12

+1. Nếu bạn đang chạy một IDE như Eclipse hoặc Idea, thư mục hiện tại sẽ là thư mục dự án, không phải là đầu ra của trình biên dịch. –

+1

@piiligrim, phụ thuộc vào cấu hình khởi chạy của bạn –

+0

@DenisTulskiy Tôi đang làm việc trên Eclipse giống như mã hóa như người mẫu đã làm. Mỏ vẫn không hoạt động, Tại sao vậy? – windsound

58

Hãy thử

System.getProperty("user.dir") 

Nó trả về thư mục làm việc hiện hành.

+3

nhưng nó chỉ trả về đường dẫn đến thư mục gốc của dự án. làm thế nào chúng ta có thể có được con đường của gói hiện tại trong phương pháp chính của java –

+0

Điều này là siêu hữu ích. Cảm ơn :) – whitehat

4

Nếu bạn biết tệp của mình sẽ tồn tại ở nơi lớp học của bạn, thư mục đó sẽ nằm trên đường dẫn lớp của bạn. Trong trường hợp đó, bạn có thể chắc chắn rằng giải pháp này sẽ giải quyết vấn đề của bạn:

URL path = ClassLoader.getSystemResource("myFile.txt"); 
if(path==null) { 
    //The file was not found, insert error handling here 
} 
File f = new File(path.toURI()); 

reader = new BufferedReader(new FileReader(f)); 
21

Không có câu trả lời nào ở trên phù hợp với tôi. Đây là những gì làm việc cho tôi.

Hãy nói tên lớp của bạn là Foo.java, để truy cập vào các myfile.txt trong thư mục tương tự như Foo.java, sử dụng mã này:

URL path = Foo.class.getResource("myFile.txt"); 
File f = new File(path.getFile()); 
reader = new BufferedReader(new FileReader(f)); 
-3

này hoạt động quá:

Path file=Paths.get("Your file path"); 
InputStream is=Files.newInputStream(file); 
BufferedReader br=new BufferedReader(new InputStreamReader(is)); 
4

Các tệp trong dự án của bạn có sẵn cho bạn liên quan đến thư mục src của bạn. nếu bạn biết rằng những gói hoặc thư mục myfile.txt sẽ được ở, nói rằng nó là trong

----src 
--------package1 
------------myfile.txt 
------------Prog.java 

bạn có thể xác định đường đi của nó là "src/package1/myfile.txt" từ Prog.java

Các vấn đề liên quan