2012-10-21 30 views
12

Tôi đang cố gắng đọc và ghi vào một tệp nhưng tôi muốn truy cập tệp đó qua Tài nguyên.Đọc và ghi vào tệp Java qua Tài nguyên

Đây là những gì tôi làm

File f = new File(ClassLoader.getSystemResource("/blah/blah/Properties.prop").toURI()); 
BufferedReader br = new BufferedReader(new FileReader(f)); 
String line = br.readLine(); 

PrintWriter p = new PrintWriter(new File(ClassLoader.getSystemResource("/blah/blah/Properties.prop").toURI())); 

nhưng không có vẻ chính xác. cách chính xác để làm điều này là gì?

Trả lời

19

Hãy thử dưới đây:

 InputStreamReader isReader= 
         new InputStreamReader(
          this.getClass().getResourceAsStream(templateName)); 
     BufferedReader br = new BufferedReader(isReader);  

hoặc

 InputStreamReader isReader= 
         new InputStreamReader(
          <youclassName>.class.getResourceAsStream(templateName)); 
     BufferedReader br = new BufferedReader(isReader); 

Đối với đầu ra, hãy thử dưới đây:

 PrintWriter writer = 
       new PrintWriter(
        new File(this.getClass().getResource(templateName).getPath()); 
+0

cảm ơn! những gì về đầu ra bằng cách sử dụng PrintWriter – CodeGuy

+0

Nên làm việc theo cùng một cách, nhưng không đọc và viết cùng một tập tin cùng một lúc. –

+0

bạn có thể chỉ cho tôi mã không. Tôi không thể có được PrintWriter làm việc – CodeGuy

0

Nhiều cách đơn giản,

try (BufferedReader bufferedReader = Files.newBufferedReader(Paths.get(Resources.getResource("path").toURI()))) { 
     //bufferedReader... 
    } 
    try (BufferedWriter bufferedWriter = Files.newBufferedWriter(Paths.get(Resources.getResource("path").toURI()))) { 
     //bufferedWriter... 
    } 

Lưu ý rằng đường dẫn có liên quan đến thư mục tài nguyên.

+0

Giải pháp này dường như không hoạt động khi tài nguyên được nhúng trong tệp jar. Trong trường hợp của tôi, URI của tài nguyên sẽ đánh giá thành '" jar: file:/C: /PCProxAPI/PCProxAPI.jar! /com/agilysys/rguest/buy/peripherals/PCProxPlusConfig.cfg "' và 'Paths.get (...) 'ném 'java.nio.file.FileSystemNotFoundException' – HairOfTheDog

+1

Đối với bất kỳ ai đang tự hỏi rằng lớp' Resources' thực sự là 'com.google.common.io.Resources' – HairOfTheDog

+0

@HairOfTheDog," Paths "utility chỉ" biết "tệp hệ thống. Khi một tệp được đóng gói trong jar, nó không còn là một mô hình hệ thống tệp nữa. – chaiyachaiya

1

Tất cả giải pháp ở trên cho thấy cách bạn có thể nhận quyền truy cập vào tài nguyên của mình trong tạo thư mục. Điều đó có nghĩa là tài nguyên đã được di chuyển để tạo thư mục với các tệp .class.
Nếu bạn cần phải viết một số tác phẩm vào nguồn lực để tiết kiệm cho họ chương trình sau khi chấm dứt, sau đó bạn sẽ phải mô tả con đường bắt đầu với dự án gốc:

./src/main/resources/foo.ext

Giải quyết này thường không được đề xuất nhưng có thể cần thiết trong các trường hợp khác.

+0

Tôi đã tự hỏi nếu có một cách sau khi trỏ đến thư mục đích để swich trong đường dẫn resouce gốc. –

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