2012-09-27 15 views
6

tôi nhận được một tập tin như thế:Nhận con đường thực sự của một tập tin trong một lớp Java

String myFile = "D:/dev/workspace/MyProject/WebContent/stats/stats.csv"; 
File statsFile = new File(myFile); 

Nhưng tôi muốn chỉ có đường dẫn tương đối như stats/stats.csv. Tôi không muốn phải viết đường dẫn đầy đủ trong mã của mình.

Trong một servlet, tôi làm điều đó theo cách này:

File statsFile = new File(this.getServletContext().getRealPath("/") + "stats/stats.csv"); 

Nhưng ở đây nó không phải là trong một servlet. Vì vậy, cách tương đương trong một lớp java là gì?

Trả lời

2

Bạn nên đặt nó trong CLASSPATH và đọc từ InputStream được mua lại bằng cách sử dụng getResourceAsStream(). Đó là cách độc lập với đường dẫn để truy cập tệp.

+0

Anh ấy nói anh ấy không muốn sử dụng nó trong Servlet – Razvan

+0

Vì vậy, hãy lấy nó từ thời gian chạy. – duffymo

+1

Người ta có thể nhận được thông qua 'SomeApplicationClass.class.getResourceAsStream()' –

0
String basePath = "D:/dev/workspace/MyProject/WebContent"; 
String absolutePath = "D:/dev/workspace/MyProject/WebContent/stats/stats.csv"; 

String relativePath = new File(basePath).toURI(). 
         relativize(new File(absolutePath).toURI()).getPath(); 

System.out.println(relativePath); // stats/stats.csv 

basePath là đường dẫn, liên quan đến đó bạn muốn nhận Relative Path.

+0

Trong thực tế, tôi tìm kiếm một cách để tìm 'basePath' mà không cần viết nó. – Emilie

+0

@Jim .. Sau đó, công việc của bạn vẫn còn giảm .. Tôi cũng phải đối mặt với cùng một vấn đề trong khi làm việc trên một trong những dự án của tôi .. sau đó chỉ tôi phát hiện ra rằng tôi có thể làm điều này .. –

0

Tôi đã tìm được giải pháp. Tôi có thể sử dụng JSP của mình để sử dụng File statsFile = new File(this.getServletContext().getRealPath("/") + "stats/stats.csv") và sau đó vượt qua statsFile vào lớp học của mình.