Tạo một đối tượng Tệp trong bộ nhớ từ một chuỗi trong Java


113

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) để chuyển dữ liệu chuỗi của tôi vào hàm. Tôi nên thêm rằng dữ liệu Chuỗi không tồn tại trong tệp (vì vậy tôi không thể đọc dữ liệu của mình từ tệp).

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


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

Các tệp được ánh xạ bộ nhớ có thể là sự 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 nội dung trực tiếp từ bộ nhớ. Để biết chi tiết, vui lòng truy cập liên kết này: javarevisited.blogspot.com/2012/01/…
Bacteria

Câu trả lời:


48

Không; các thể hiện của lớp Fileđại diện cho một đường dẫn trong 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 mà phải InputStreamthay thế?


76

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

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) {
}

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

12

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


1
Nếu bạn cần chuyển tệp tới API bên ngoài, bạn cần tệp thực - việc chuyển đối tượng Tệp "trống" sẽ không hoạt động.
Andrei Volgin

8

Các Filelớp đại diện cho "ý tưởng" của một tập tin, không phải là một tay cầm thực tế để sử dụng cho I / O. Đây là lý do tại sao Filelớp có một .exists()phương thức để 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 Fileđối tượng 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 một luồng thực tế để đọc các byte từ đó.


-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.

thí dụ

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.