2013-08-08 37 views
6

Tôi nhận được ngoại lệ cho biết 'hệ thống không thể tìm thấy đường dẫn được chỉ định' trong khi gọi hàm java createTempFile("test", "test"). Đã cố gắng googling nhưng không có may mắn. Có ai biết từ đâu java được đường dẫn tạm thời mặc định của nó và làm thế nào nó có thể không được tìm thấy? Biến Windows có vẻ đúng và thay đổi chúng không ảnh hưởng đến java.Hệ thống không thể tìm thấy đường dẫn trong khi createTempFile

+3

Codes xin vui lòng ... –

+2

séc whats trong String dirName = System.getProperty ("java.io.tmpdir"); Và cũng có thể thử định nghĩa dirpty tempDir với: File.createTempFile (Tiền tố chuỗi, Hậu tố chuỗi, Thư mục tệp) – Horuss

+0

File.CreateTempFile ("test", "test") là prettymuch trong khi mã :) – user1985273

Trả lời

13

Có ai biết từ đâu java được con đường tạm thời mặc định của nó

Nó được đọc từ java.io.tmpdir tài sản.

Files.createTempFile("test", "test"); 

về cơ bản gọi java.nio.file.TempFileHelper.createTempFile(null, prefix, suffix, attrs); gọi lại java.nio.file.TempFileHelper.create(dir, prefix, suffix, false, attrs);. Ở đó, nếu dir là null, nó được thiết lập để tmpdir được khai báo như sau:

private static final Path tmpdir = 
    Paths.get(doPrivileged(new GetPropertyAction("java.io.tmpdir"))); 

Bạn có thể thiết lập thuộc tính một cách rõ ràng như trong câu trả lời từ @Joni. Nếu bạn không đặt nó một cách rõ ràng, JVM khởi nó vào một nền tảng giá trị mặc định cụ thể lúc khởi động - xem thêm Environment variable to control java.io.tmpdir?

và làm thế nào nó có thể được tìm thấy không?

Nếu thuộc tính java.io.tmpdir trỏ đến thư mục không hợp lệ, bạn không thể tạo tệp tạm thời.

7

độc lập như thế nào giá trị mặc định được cung cấp, bạn có thể thiết lập các tập tin thư mục tạm thời bằng cách thiết lập hệ thống sở hữu java.io.tmpdir khi khởi động JVM:

java -Djava.io.tmpdir=/path/to/where/ever/you/like YourClass 

Nếu bạn muốn biết nơi mà các giá trị mặc định đến từ đâu, bạn sẽ phải đọc mã nguồn cho JVM của mình. Ví dụ, OpenJDK trên Windows gọi hàm API GetTempPathW (tìm kiếm các tập tin java_props_md.c trong mã nguồn JDK), trông lên các đường dẫn trong biến môi trường và đăng ký theo cách sau:

Các GetTempPath kiểm tra chức năng cho sự tồn tại của biến môi trường theo trình tự sau và sử dụng đường dẫn đầu tiên được tìm thấy:

  1. Đường dẫn được chỉ định bởi biến môi trường TMP.
  2. Đường dẫn được chỉ định bởi biến môi trường TEMP.
  3. Đường dẫn được chỉ định bởi biến môi trường USERPROFILE.
  4. Thư mục Windows.

Lưu ý rằng hàm không xác minh rằng đường dẫn tồn tại, cũng không kiểm tra xem quy trình hiện tại có bất kỳ loại quyền truy cập nào đối với đường dẫn hay không.

+0

Nhưng nếu tôi thay đổi các biến env TMP thì java.io.tmpdir vẫn in tới oodatuim không? – user1985273

+0

Giả sử "oodatuim" có nghĩa là thư mục: có thể chương trình của bạn được khởi chạy với tập lệnh đặt lại TMP, có thể bạn cần khởi động lại hệ thống để thay đổi có hiệu lực, có thể JVM của bạn không sử dụng hàm GetTempPath, không thể biết được dữ liệu được cung cấp. – Joni

3

Hãy thử:

String path = System.getProperty("java.io.tmpdir"); 

Xem: get property method

Và để thêm nó ở đây cho đầy đủ vì lợi ích, cũng có những phương pháp createTempFile(String prefix,String suffix)createTempFile(String prefix, String suffix, File directory) phương pháp từ Java file lớp học.

Đây là mã của tôi để con đường vây của tập tin tạm thời và tìm ra con đường tạm thời:

public class GetTempFilePathExample 
{ 
    public static void main(String[] args) 
    { 

     try{ 

      //create a temp file 
      File temp = File.createTempFile("temp-file-name", ".tmp"); 

      System.out.println("Temp file : " + temp.getAbsolutePath()); 

     //Get tempropary file path 
      String absolutePath = temp.getAbsolutePath(); 
      String tempFilePath = absolutePath. 
       substring(0,absolutePath.lastIndexOf(File.separator)); 

      System.out.println("Temp file path : " + tempFilePath); 

     }catch(IOException e){ 

      e.printStackTrace(); 

     } 

    } 
} 

Output của mã này là:

Temp file : /tmp/temp-file-name3697762749201044262.tmp 
Temp file path : /tmp 
Các vấn đề liên quan