2011-12-26 44 views
6

Tôi có một câu hỏi Java mà tôi gặp sự cố với: một cách tốt để chỉ ra đường dẫn tệp tương đối là gì.Đường dẫn tệp tương đối Java

Hãy để tôi cụ thể hơn. Tôi muốn có thể nói để luôn tìm kiếm các tệp cấu hình trong ./configuration/file.txt. Vấn đề tôi gặp phải là chương trình của tôi sẽ chỉ hoạt động chính xác nếu nó được khởi động từ thư mục mà tập tin đang ở. Nếu thay vào đó tôi bắt đầu nó từ một thư mục khác như ./directory/to/my/program/execute.sh thì nó không hoạt động chính xác.

Nhưng tôi cũng cần phải thay đổi tập tin này, và các nguồn lực dường như muốn được read-only ...

+0

Ý của bạn là './configuration/file.txt' thay vì'/configuration/file.txt'. Con đường thứ hai là tuyệt đối và không nên gây ra vấn đề. –

+0

thx bắt tốt, sửa lỗi đánh máy –

+0

Bạn có thể đặt đường dẫn tuyệt đối vào tệp cấu hình * thực * trong tài nguyên nếu bạn cần khả năng sửa đổi cài đặt cấu hình. –

Trả lời

3

Bạn cần cung cấp một cơ chế để xác định một thư mục, như thông qua một biến môi trường, một đối số dòng lệnh, tệp cấu hình, API tùy chọn, v.v.

2

Nếu bạn muốn /configuration/file.txt để biểu thị một tập tin tương ứng với một cái gì đó, bạn sẽ phải xác định những gì mà một cái gì đó Là. Chúng tôi thường cho rằng một cái gì đó là "classpath hoặc thư mục hiện tại". Bạn sẽ phải viết một số mã để làm cho công việc đó mặc dù. Một cái gì đó dọc theo dòng sau (không được kiểm tra).

public InputStream getResource(String path) throws IOException { 
    // try relative to current directory 
    File file = new File(path); 
    if (file.exists()) { 
    return new FileInputStream(file); 
    } 
    // try the classpath 
    return Thread.currentThread().getContextClassLoader().getResourceAsStream(path); 
} 
3

Để đảm bảo dữ liệu của bạn luôn ở cùng vị trí bạn có thể sử dụng thư mục chính. Tận dụng của thư mục chính sẽ cung cấp cho bạn một số tính nhất quán trên nhiều nền tảng khác nhau và chương trình của bạn có thể truy cập dữ liệu không phụ thuộc vào thư mục đó là trong

Ví dụ:.

String userHomeDir = System.getProperty("user.home", "."); 
String systemDir = userHomeDir + "/.collection"; 

Và sau đó bạn có thể lấy một tập tin sau đó với một cái gì đó như

String fileLocation = systemDir + "/file.txt"; 
+0

Xem thêm [câu trả lời này] (http://stackoverflow.com/a/5052359/418556). –

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