2012-02-05 40 views
5

Tôi đang cố gắng viết ứng dụng khách/máy chủ tcp đơn giản sao chép tệp. Tôi muốn máy chủ liệt kê các tệp mà ứng dụng khách có thể sao chép. Mã của tôi cho đến nay là thế này:Nhận đường dẫn hiện tại của tệp java đang chạy

import java.io.*; 
public class GetFileList 
{ 
    public static void main(String args[]) throws IOException{ 
     File file = new File("."); 
     File[] files = file.listFiles(); 
     System.out.println("Current dir : " + file.getCanonicalPath()); 
     for (int fileInList = 0; fileInList < files.length; fileInList++) 
     { 
      System.out.println(files[fileInList].toString()); 
     } 
    } 
} 

Output:

Current dir : C:\Users\XXXXX\Documents\NetBeansProjects\Test 
.\build 
.\build.xml 
.\manifest.mf 
.\nbproject 
.\src 
.\UsersXXXXXDocumentsNetBeansProjectsTestsrcfile2.txt 

Vấn đề của tôi là nó đem lại cho tôi thư mục cha thay vì thư mục hiện hành. GetFileList.java của tôi nằm ở C:\Users\XXXXX\Documents\NetBeansProjects\Test\src nhưng nó đang hiển thị C:\Users\Alick\Documents\NetBeansProjects\Test Bất kỳ ai có thể giúp tôi khắc phục sự cố này không?

+0

Tại sao trên trái đất sẽ cho người dùng cuối muốn tải lên tập tin có trong các ứng dụng của riêng danh mục?!? Cung cấp cho họ một 'JFileChooser' (mặc định là' user.home') và cho phép họ lấy nó từ đó. BTW - xin vui lòng không được quá sai với mã indents, và sử dụng một hệ thống hợp lý và nhất quán. –

Trả lời

3

Mã hoạt động chính xác. Nó không cung cấp cho bạn vị trí của tệp nguồn của bạn. Nó cung cấp cho bạn thư mục hiện tại nơi chương trình của bạn đang chạy.

Tôi tin rằng bạn đang chạy chương trình từ IDE, vì vậy thư mục hiện tại trong trường hợp này là thư mục gốc của dự án của bạn.

Bạn có thể liệt kê thư mục src dự án của mình bằng cách gọi new File("src").listFiles() nhưng tôi không nghĩ bạn thực sự cần điều này: khi bạn biên dịch và đóng gói chương trình, thư mục nguồn và nguồn không có sẵn.

Tôi nghĩ rằng nếu bạn muốn có thể hiển thị một số cấu trúc thư mục cho người dùng của bạn, chương trình của bạn sẽ nhận được thư mục gốc làm tham số. Ví dụ, bạn nên chạy chương trình của bạn như

java -cp YOUR-CLASSPATH MyClass c:/root

Vì vậy, tất cả các file dưới c:\root sẽ có sẵn.

+0

O Tôi thấy vấn đề. Tôi chạy nó trên cmd và nó là chính xác. Cảm ơn lời giải thích! – Dan

0

Thay vì Tệp tệp = tệp mới ("."); Sử dụng đường dẫn tuyệt đối. Bạn không thể phụ thuộc vào chương trình khởi chạy của người dùng từ thư mục cụ thể.

Nếu bạn muốn Netbeans để khởi động chương trình của bạn từ thư mục cụ thể mà bạn có thể chỉ định thư mục như thư mục làm việc trong Project Properties -> Run

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