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
Trả lời
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.
độ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:
- Đường dẫn được chỉ định bởi biến môi trường TMP.
- Đường dẫn được chỉ định bởi biến môi trường TEMP.
- Đường dẫn được chỉ định bởi biến môi trường USERPROFILE.
- 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.
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
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
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) và 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
- 1. Dòng lệnh Đường bay không thể tìm thấy di chuyển trên hệ thống tệp
- 2. Haskell Không thể tìm thấy mô-đun 'Hệ thống'
- 3. javaw.exe không thể tìm thấy con đường
- 4. Hệ thống không thể tìm thấy tệp được chỉ định khi chạy CMD.exe từ C#
- 5. chương trình g ++ không tìm thấy trong đường dẫn
- 6. TortoiseHg không thể cam kết - "Hệ thống không thể tìm thấy tệp được chỉ định"
- 7. "Hệ thống không thể tìm thấy đường dẫn được chỉ định". thông báo lỗi khi cố gắng bắt đầu GlassFish với asadmin
- 8. VBScript WScript.Shell Run() - Hệ thống không thể tìm thấy tệp được chỉ định
- 9. Đường dẫn hệ thống so với Sys.getenv ('PATH')
- 10. Chuyển đổi đường dẫn URI sang đường dẫn hệ thống tệp tương đối trong .NET
- 11. Tìm đường dẫn nơi Git được cài đặt trên hệ thống Windows
- 12. PHP - Chuyển đổi đường dẫn hệ thống tệp thành URL
- 13. tăng hệ thống tập tin :: đường dẫn constructor std :: length_error
- 14. "Hệ thống không thể tìm thấy tập tin chỉ định" trong khi tạo ra một dự án mới MVC4
- 15. CUDAfy.NET cho Win32Exception: Hệ thống không thể tìm thấy tệp được chỉ định
- 16. Cài đặt Numpy và Scipy - Không thể tìm thấy hệ thống python 2.6
- 17. pkg-config không thể tìm thấy tệp .pc mặc dù chúng nằm trong đường dẫn
- 18. lỗi matplotlib.animation - Hệ thống không thể tìm thấy tệp được chỉ định
- 19. CMake không thể tìm thấy FFMPEG trong đường dẫn cài đặt tùy chỉnh
- 20. Làm thế nào tôi có thể tìm thấy đường dẫn thực tế được tìm thấy bởi BFS?
- 21. Không thể tìm thấy Dumpbin.exe
- 22. notepad ++ htmltidy - không thể tìm thấy libtidy.dll
- 23. Không thể tìm thấy crtn.o, liên kết mã 32 bit trên hệ thống 64 bit
- 24. Cách kiểm tra xem đường dẫn có hợp lệ trong tăng :: hệ thống tệp không?
- 25. Đường ray: Không thể tìm thấy đường ray
- 26. IOException: Không thể chạy chương trình "javac": Lỗi CreateProcess = 2, Hệ thống không thể tìm thấy tệp được chỉ định
- 27. plugin eclipse android không thể tìm thấy đường dẫn hợp lệ
- 28. Không thể giải quyết WindowsError: [Lỗi 2] Hệ thống không thể tìm thấy tệp được chỉ định
- 29. Hệ thống không thể tìm ra con đường chỉ định với FileWriter
- 30. "Truy cập vào đường dẫn hệ thống bị từ chối" khi sử dụng 'System.IO.Directory.Delete'
Codes xin vui lòng ... –
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
File.CreateTempFile ("test", "test") là prettymuch trong khi mã :) – user1985273