2011-11-10 28 views
99

Dường như có ba giống hệt cách để có được những "tập tin phân cách" nền tảng phụ thuộc vào nền tảng độc lập:File.separator vs FileSystem.getSeparator() vs System.getProperty ("file.separator")?

Làm cách nào để quyết định thời điểm sử dụng?

Có sự khác biệt nào giữa chúng không?

+0

Bạn có thực sự nhận được trình tách tệp phụ thuộc vào nền tảng tại đây không? Chỉ trong một trang viên độc lập với nền tảng. – Steiny

+0

@Steiny, Yea, đã cập nhật. – Pacerier

Trả lời

107

System.getProperties() có thể được ghi đè bởi các cuộc gọi đến System.setProperty(String key, String value) hoặc với tham số dòng lệnh -Dfile.separator=/

File.separator được tách cho hệ thống tập tin mặc định.

FileSystems.getDefault() mang đến cho bạn hệ thống tệp mặc định.

FileSystem.getSeparator() mang đến cho bạn ký tự phân tách cho hệ thống tệp. Lưu ý rằng như một phương thức thể hiện, bạn có thể sử dụng phương thức này để chuyển các hệ thống tệp khác với mã của bạn khác với mặc định, trong trường hợp bạn cần mã của bạn hoạt động trên nhiều hệ thống tệp trong một JVM.

+2

Cool = D Btw bạn có thể xây dựng một phần về "hoạt động nhiều hệ thống tập tin" không? – Pacerier

+2

@Pacerier Về lý thuyết, nếu tôi đã viết một hệ thống tập tin mới (BringerFS) có ký tự phân tách ":" và bạn có một máy có 2 phân vùng, một ở NTFS và một trong BringerFS, chức năng này sẽ cho phép bạn sử dụng cả hai (giả sử tôi cũng đã viết một nhà cung cấp hệ thống tập tin Java). – Bringer128

+0

Tôi có nghĩa là thực tế là nó hữu ích, như nói rằng ai đó đã có 2 phân vùng một Windows và một UNIX, và ông đang chạy ứng dụng của tôi (trên phân vùng Windows của mình), là lớp có thể truy cập * hệ thống tập tin UNIX của mình? (Tôi thực sự không thể kiểm tra điều này vì tôi không cài đặt một hệ thống FileSystem khác.) – Pacerier

22

Nếu mã của bạn không vượt qua ranh giới hệ thống tệp, tức là bạn chỉ đang làm việc với một hệ thống tệp, sau đó sử dụng java.io.File.separator.

Điều này, như được giải thích, giúp bạn có được dấu phân cách mặc định cho FS của bạn. Như Bringer128 giải thích, System.getProperty("file.separator") có thể được ghi đè lên thông qua các tùy chọn dòng lệnh và không an toàn như loại java.io.File.separator.

Cuối cùng, java.nio.file.FileSystems.getDefault().getSeparator(); được giới thiệu trong Java 7, vì vậy bạn có thể bỏ qua nó ngay bây giờ nếu bạn muốn mã của bạn được di động trên các phiên bản Java cũ hơn.

Vì vậy, mỗi một trong các tùy chọn này gần như giống với các tùy chọn khác, nhưng không hoàn toàn. Chọn một trong đó phù hợp với nhu cầu của bạn.

+0

Có phải 'java.io' không được dùng để ủng hộ' java.nio'? – Pacerier

+8

@Pacerier: không, nó không được chấp nhận. 'java.io' hơi thấp hơn' java.nio', nhưng vẫn rất hữu dụng. Bạn có thể thấy sự khác biệt ở đây: https://blogs.oracle.com/slc/entry/javanio_vs_javaio. 'nio' không thay thế' io', nó mở rộng nó theo nhiều cách (và sử dụng 'io' dưới mui xe). – darioo

+0

Cảm ơn đó là một liên kết tốt =) – Pacerier

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