2013-08-08 27 views
5

Đây là lần đầu tiên tôi gặp sự cố như vậy với việc truy cập tệp bằng Java trên Linux. Vấn đề cũng giống như tiêu đề nói - FileNotFoundException được ném khi tệp thực sự tồn tại. Hơn nữa, ứng dụng có cùng cấu hình (tệp props.txt) chạy như trên cửa sổ. Hãy để tôi cung cấp một chút giao diện điều khiển đầu raTại sao FileNotFoundException được ném trong khi nó tồn tại trên linux

 
[email protected]:~/netcrawler/dkpto$ ls -l 
total 20 
-rwxrw-rw- 1 datasu datasu 114 Aug 7 15:53 autoupdate 
drwxr-xr-x 4 datasu datasu 4096 Aug 8 11:57 data 
drwxr-xr-x 2 datasu datasu 4096 Aug 8 11:57 log 
-rw-rw-rw- 1 datasu datasu 32 Aug 8 12:44 props.txt 
-rwxrw-rw- 1 datasu datasu 126 Aug 8 12:55 propsUpdate 
[email protected]:~/netcrawler/dkpto$ ./propsUpdate 
Parent: /usr/home/datasu/netcrawler/dkpto 
    1# -> propsUpdate 
    2# -> autoupdate 
    3# -> props.txt 
    4# -> data 
    5# -> log 
(No such file or directory)ava.io.FileNotFoundException: /usr/home/datasu/netcrawler/dkpto/props.txt 
     at java.io.FileInputStream.open(Native Method) 
     at java.io.FileInputStream.(Unknown Source) 
     at netcrawler.Autoupdater.readProperties(Autoupdater.java:71) 
     at netcrawler.Autoupdater.start(Autoupdater.java:54) 
     at netcrawler.Autoupdater.main(Autoupdater.java:47) 
[email protected]:~/netcrawler/dkpto$ java -version 
java version "1.6.0_45" 
Java(TM) SE Runtime Environment (build 1.6.0_45-b06) 
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) 
[email protected]:~/netcrawler/dkpto$ 

và đây là mã Java chịu trách nhiệm tạo ra rằng đầu ra (ít nhất là sau khi gọi ./propsUpdate)

private void readProperties(String args) throws FileNotFoundException, IOException { 
    System.out.println("Parent: " + new  File(args).getAbsoluteFile().getParentFile().getAbsolutePath()); 
    CommonTools.PrintArray(new File(args).getAbsoluteFile().getParentFile().list()); 
    properties.load(new FileInputStream(new File(args).getAbsoluteFile())); // this line throws the exception 
    stageNumber = Integer.parseInt(properties.getProperty(PROP_STAGE_NUMBER_KEY, "0")); 
} 

Vậy tại sao các tập tin props.txt không được tìm thấy khi nó thực sự ở đó?

+1

Đường dẫn chính xác có thực sự là '/ usr/home/datasu /' không? Tôi không biết phiên bản Linux/unix của bạn nhưng không phải là nó thường là somehwere tại '/ home/...'? Đặc biệt là vì bạn hiển thị '~ /' trong dòng đầu tiên mà tham chiếu đến thư mục chính. – DrColossos

+0

Đây là kết quả PWD cho bạn: datasu @ dedi2392: ~/netcrawler/dkpto $ pwd -> /usr/home/datasu/netcrawler/dkpto – Antoniossss

+1

Cú pháp chính xác của 'args' mà bạn đang chuyển đến' readProperties là gì '? –

Trả lời

6

Chuỗi "args" có thể có ký tự không in ở cuối, giống như một khoảng trắng. Bạn có thể sử dụng String.trim() để loại bỏ các ký tự như vậy trước khi sử dụng biến đó.

+2

Wow, bây giờ chỉ là ngu ngốc. Tôi đã kiểm tra kịch bản ăn trưa đôi cho một số không gian, vv trong tên tập tin nhưng không có gì ở đó. BAO GIỜ cắt tỉa các đối số thực hiện các trick. Cảm ơn bạn đã đề xuất. Bài học cho ngày hôm nay: Không bao giờ tin tưởng các đối số được truyền bởi dòng lệnh. Có cách nào để làm cho VI, VIM để hiển thị nonprintables? – Antoniossss

+0

Có, ': đặt danh sách' –

+0

Bạn luôn có thể' echo $ arg | hexdump -C' –

2

Thư mục chính của bạn có thực sự là đường dẫn này không?

/usr/home/datasu 

/home/datasu là nơi thông thường trên Linux.

Ngoài ra, hãy thử thay đổi dòng này:

properties.load(new FileInputStream(new File(args)); 

Nếu bạn đang gọi điện thoại mà như ./propsUpdate ./props.txt rằng sẽ làm việc từ thư mục làm việc hiện tại.

+0

Đường dẫn này là chính xác, vì bạn có thể bắt đầu ứng dụng và thư mục mẹ được liệt kê tốt với đường dẫn như vậy (mã kiểm tra đã tạo) – Antoniossss

+0

Mã mà bạn đã cung cấp là phiên bản đầu tiên, và tôi có thay đổi nó để xem đường dẫn đầy đủ để tập tin trong trường hợp ngoại lệ – Antoniossss

+0

Hãy xem xét thực tế là đường dẫn là tuyệt đối, do đó, thư mục làm việc không nên ảnh hưởng đến điều đó. Hơn nữa đường dẫn được tạo ra bởi Java và cùng một mã hoạt động tốt trên các cửa sổ. – Antoniossss

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