2011-08-16 39 views
68

Tôi có một hàm chấp nhận Tệp làm đối số. Tôi không muốn tạo/ghi một tệp mới (tôi không có quyền ghi vào hệ thống tệp) để truyền dữ liệu chuỗi của tôi cho hàm. Tôi nên thêm rằng dữ liệu String không tồn tại trong một tập tin (vì vậy tôi không thể đọc dữ liệu của tôi từ một tập tin).Tạo đối tượng Tệp trong bộ nhớ từ một chuỗi trong Java

Tôi có thể sử dụng Luồng và "truyền" chúng vào đối tượng Tệp không?

+2

Bạn có thể liên kết/đăng mã có đối tượng 'Tệp' không? Như các câu trả lời đã nêu, một đối tượng 'File' giống như một tham chiếu đến một vị trí trong hệ thống tập tin, và do đó sẽ khó để mô phỏng mà không có một tập tin thực tế. Tuy nhiên, nếu hàm của bạn lấy một 'FileReader' hoặc' FileInputStream', bạn có thể dễ dàng sửa đổi mã để chấp nhận đầu vào không phải là tệp. – 101100

+0

Các tệp ánh xạ bộ nhớ có thể là lựa chọn của bạn. Đây là những tệp đặc biệt trong Java cho phép chương trình Java truy cập trực tiếp nội dung từ bộ nhớ. Để biết chi tiết, vui lòng xem qua liên kết sau: http://javarevisited.blogspot.com/2012/01/memorymapped-file-and-io-in-java.html – Bikku

Trả lời

32

Không; các cá thể của lớp File thể hiện một đường dẫn trong một hệ thống tệp. Do đó, bạn chỉ có thể sử dụng chức năng đó với một tệp. Nhưng có lẽ có một sự quá tải thay vào đó, thay vào đó hãy thay thế một số InputStream?

+0

Không: Không có chức năng quá tải –

-1
FileReader r = new FileReader(file); 

Sử dụng trình đọc tệp tải tệp và sau đó ghi nội dung của nó vào bộ đệm chuỗi.

example

Liên kết ở trên cho bạn thấy ví dụ về cách thực hiện điều này. Như các bài viết khác cho câu trả lời này nói để tải một tập tin vào bộ nhớ, bạn không cần phải ghi truy cập miễn là bạn không có kế hoạch thay đổi tập tin thực tế.

7

Một đối tượng File trong Java là đại diện cho đường dẫn đến thư mục hoặc tệp, chứ không phải chính tệp đó. Bạn không cần phải có quyền ghi vào hệ thống tệp để tạo đối tượng File, bạn chỉ cần nó nếu bạn định thực sự ghi vào tệp (ví dụ: FileOutputStream)

3

Lớp File đại diện cho "ý tưởng" của một tệp, không phải là một xử lý thực tế để sử dụng cho I/O. Đây là lý do tại sao lớp File có phương thức .exists(), để cho bạn biết liệu tệp có tồn tại hay không. (Làm thế nào bạn có thể có một đối tượng File không tồn tại?)

Ngược lại, việc xây dựng một new FileInputStream(new File("/my/file")) cung cấp cho bạn luồng thực tế để đọc byte.

+2

Điểm tốt; không trả lời câu hỏi. – Jus12

47

Thông thường khi phương thức chấp nhận tệp, có phương pháp khác gần đó chấp nhận luồng. Nếu không phải như vậy, API sẽ bị mã hóa sai. Nếu không, bạn có thể sử dụng các tệp tạm thời, nơi quyền thường được cấp trong nhiều trường hợp. Nếu đó là applet, bạn có thể request write permission.

Một ví dụ:

try { 
    // Create temp file. 
    File temp = File.createTempFile("pattern", ".suffix"); 

    // Delete temp file when program exits. 
    temp.deleteOnExit(); 

    // Write to temp file 
    BufferedWriter out = new BufferedWriter(new FileWriter(temp)); 
    out.write("aString"); 
    out.close(); 
} catch (IOException e) { 
} 
+0

Không thể yêu cầu quyền ghi (đó là Google AppEngine) –

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