2012-02-03 27 views
6

Tôi đang cố gắng mở tệp bằng FileInputStream có khoảng trắng trong tên của chúng.Java đọc tệp với khoảng trắng trong đường dẫn của nó

Ví dụ:

String fileName = "This is my file.txt"; 
String path = "/home/myUsername/folder/"; 

String filePath = path + filename; 
f = new BufferedInputStream(new FileInputStream(filePath)); 

Kết quả là một FileNotFoundException đang được ném. Tôi đã cố gắng để hardcode filePath để "/home/myUserName/folder/This\\ is\\ my\\ file.txt" chỉ để xem nếu tôi nên thoát khỏi ký tự khoảng trắng và nó dường như không hoạt động. Bất kỳ đề xuất nào về vấn đề này?

CHỈNH SỬA: Chỉ để ở trên cùng một trang với mọi người đang xem câu hỏi này ... mở một tệp mà không có khoảng trắng trong tên của nó hoạt động, một tệp có khoảng trắng không thành công. Quyền không phải là vấn đề ở đây cũng không phải là dấu tách thư mục.

+0

thể trùng lặp của http://stackoverflow.com/questions/5358850/accessing-files-with-spaces-in-filename-from-java –

Trả lời

3

File name với không gian làm việc tốt

Đây là mã của tôi

File f = new File("/Windows/F/Programming/Projects/NetBeans/TestApplications/database prop.properties"); 
     System.out.println(f.exists()); 
     try 
     { 
      FileInputStream stream = new FileInputStream(f); 
     } 
     catch (FileNotFoundException ex) 
     { 
      System.out.println(ex.getMessage()); 
     } 

f.exists() lợi nhuận true luôn mà không cần bất kỳ vấn đề

+0

cảm ơn đã cho tôi thấy rằng trước tiên tôi phải sử dụng File (đường dẫn) trước khi gửi nó đến FileInputStream. – user253530

+0

@ user253530: Bạn ngụ ý rằng mã ban đầu của bạn không hoạt động, và gói 'filePath' vào một' File() 'làm cho nó hoạt động ?! – NPE

+1

có ... nếu tôi sử dụng FileInputStream (String filePath) nó không hoạt động .... nhưng nếu tôi lần đầu tiên làm File f = new File (filePath) và sau đó FileInputStream (f) không ném một lỗi ... rất lạ .. – user253530

0

Không, bạn không cần phải thoát khỏi khoảng trắng.

Nếu mã ném FileNotFoundException, thì tệp không tồn tại (hoặc, có thể, bạn thiếu các quyền cần thiết để truy cập vào nó).

Nếu quyền được chấp thuận và bạn cho rằng tệp đó tồn tại, hãy đảm bảo rằng tệp đó được gọi là tên bạn cho là được gọi. Đặc biệt, hãy đảm bảo rằng tên tệp không chứa bất kỳ ký tự không thể in nào, các khoảng trống đầu tiên hoặc dấu chấm dòng vô ý vv. Đối với điều này, ls -b có thể hữu ích.

+0

tập tin mà không gian trong con đường của mình ok, tôi có thể mở chúng ... để cho phép dường như không phải là vấn đề: ( – user253530

+1

@ user253530: Hiển thị cho chúng ta kết quả từ 'ls -l' liệt kê tệp đang được đề cập đến. – NPE

+0

-rw-r - r-- 1 gốc gốc 101 2012-02-03 11:16 add.txt -rw-r - r-- 1 gốc gốc 13969 2012-02-02 20:23 TRƯỜNG HỢP 1A. txt mọi người đều có quyền đọc ... đây không phải là vấn đề ... tôi có thể mở add.txt nhưng tôi không thể mở CASE 1A.txt ... đó là tên tôi chắc chắn rằng – user253530

1

Có vẻ như bạn gặp vấn đề hơn với trình phân tách tệp so với khoảng trắng trong tên tệp của bạn. Bạn đã thử sử dụng

System.getProperty("file.separator") 

thay vì '/' của bạn trong biến đường dẫn?

+0

đọc các chỉnh sửa mới nhất – user253530

+0

không thoát khỏi khoảng trắng của bạn, tôi tin rằng bạn đang ở trên Unix/Linux như env. Nếu nó không hoạt động, bạn đang làm sai ví dụ khác. mispelling tên tập tin hoặc smth khác – Kris

-1

Thông thường khoảng trắng trong con đường should't quan trọng. Chỉ cần chắc chắn rằng khi bạn đang đi qua đường đi từ nguồn bên ngoài (như dòng lệnh), rằng nó không chứa khoảng trắng ở cuối:

File file = new File(path.trim()); 

Trong trường hợp bạn muốn có con đường mà không có dấu, bạn có thể chuyển đổi nó để URI và sau đó trở lại con đường

try { 
    URI u = new URI(path.trim().replaceAll("\\u0020", "%20")); 
    File file = new File(u.getPath()); 
} catch (URISyntaxException ex) { 
    Exceptions.printStackTrace(ex); 
} 
Các vấn đề liên quan