2010-04-23 3 views
28

Làm cách nào để có được đường dẫn tương đối của các thư mục trong dự án của tôi bằng mã?Làm cách nào để có được đường dẫn tương đối của các thư mục trong dự án Android của tôi?

Tôi đã tạo thư mục mới trong dự án của mình và tôi muốn đường dẫn tương đối của nó cho dù ứng dụng ở đâu, đường dẫn sẽ chính xác.

Tôi đang cố gắng làm điều đó trong lớp học của mình kéo dài android.app.Activity.

Có lẽ một cái gì đó tương tự như "get file path from asset".

Trả lời

23

Sử dụng đường dẫn lớp.

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
URL url = classLoader.getResource("path/to/folder"); 
File file = new File(url.toURI()); 
// ... 
+3

Nếu bởi "path/to/thư mục" bạn có nghĩa là tôi cần phải chèn đường dẫn đến thư mục dự án vì vậy điểm trong đó là gì ....? –

+5

Nó liên quan đến gốc classpath. Bạn không cần 'c:/absolute/path/to/java/program' trước nó. Hãy thử ở trên. In kết quả của 'url' hoặc' file'.Chơi với nó và bạn sẽ hiểu. – BalusC

+0

Tôi vẫn không hiểu tôi nên đặt gì thay vì -> "đường dẫn/đến/thư mục" –

0

Bạn có thể kiểm tra mẫu mã này để hiểu làm thế nào bạn có thể truy cập vào đường dẫn tương đối bằng cách sử dụng java mẫu mã

import java.io.File; 

public class MainClass { 

    public static void main(String[] args) { 

    File relative = new File("html/javafaq/index.html"); 

    System.out.println("relative: "); 
    System.out.println(relative.getName()); 
    System.out.println(relative.getPath()); 
    } 
} 

Đây getPath sẽ hiển thị đường dẫn tương đối của tập tin.

+6

Đây là cách sai. Đường dẫn sẽ liên quan đến thư mục làm việc. I E. thư mục mà từ đó bạn ** đã thực hiện ** chương trình, không phải là thư mục mà chính chương trình đang chạy. Không bao giờ sử dụng các đường dẫn tương đối trong 'java.io.File', đó chỉ là sự cố về tính di động. – BalusC

+0

@BalusC, Bạn có thể đề xuất bất kỳ cách nào khác không? – gmhk

+0

Tôi đã trả lời rằng trong câu hỏi này. – BalusC

0

Trong Android, dữ liệu meta cấp ứng dụng được truy cập thông qua tham chiếu Context, hoạt động này là hậu duệ của. Ví dụ, bạn có thể lấy thư mục nguồn qua thuộc tính getApplicationInfo().sourceDir. Có các phương pháp cho các thư mục khác (thư mục tài sản, thư mục dữ liệu, thư mục cơ sở dữ liệu, v.v.).

+0

Tôi không tìm thấy cách tôi có thể có được đường dẫn ứng dụng với this.can bạn cụ thể hơn? –

+0

Bằng cách này tôi chỉ có thể nhận được các thư mục nằm trong gói. Tôi cần có một đường dẫn tương đối đến một thư mục mà tôi đã tạo bên trong dự án (không phải bên trong gói). Thư mục như nội dung. Bạn có thể cho tôi chức năng có thể làm được không? –

18

Bạn đang tìm thư mục gốc của ứng dụng? Sau đó, tôi sẽ sử dụng

String path = getClass().getClassLoader().getResource(".").getPath(); 

để thực sự "tìm hiểu tôi đang ở đâu".

+0

Tôi đã thử điều này trước và tôi nhận được "/" nhưng điều này là không đúng. (gây ra khi tôi cố tìm một tệp không tồn tại) –

+0

Bạn đang chạy nền tảng/hệ điều hành nào? Chỉ cần "/" sẽ chỉ ra Unix/linux/OSX và rằng bạn đang chạy ứng dụng của mình từ đường dẫn gốc của hệ thống tệp. Nếu điều đó không chính xác, vui lòng cung cấp thêm thông tin. – Kennet

+1

Hệ điều hành của tôi là win7 đường dẫn là: "D: \ Eclipse \ Workspace \ Project Name" Đừng quên rằng đây là một ứng dụng Android mà tôi đang chạy bằng trình giả lập –

6
File relativeFile = new File(getClass().getResource("/icons/forIcon.png").toURI()); 
myJFrame.setIconImage(tk.getImage(relativeFile.getAbsolutePath())); 
1

Với điều này tôi thấy con đường dự án của tôi:

new File("").getAbsolutePath(); 

trở lại này "c: \ Projects \ SampleProject"

-1

Nói chung, chúng tôi muốn thêm các tập tin hình ảnh, txt, doc và vv trong dự án Java của chúng tôi và thư mục cụ thể như/images. tôi tìm thấy trong tìm kiếm trong JAVA, chúng tôi có thể nhận được đường đi từ gốc đến thư mục mà chúng tôi xác định như,

String myStorageFolder= "/images"; // this is folder name in where I want to store files. 

String getImageFolderPath= request.getServletContext().getRealPath(myStorageFolder); 

Ở đây, yêu cầu là đối tượng của HttpServletRequest. Nó sẽ nhận được toàn bộ đường dẫn từ thư mục gốc đến/hình ảnh. Bạn sẽ nhận được kết quả như thế nào,

C: \ Users \ Stark \ Workspaces \ MyEclipse.metadata.me_tcat7 \ webapps \ JavaProject \ images