Cách đơn giản nhất để chuyển đổi một FileOutputStream thành FileInputStream (một đoạn mã nào là tuyệt vời)?FileOutputStream vào FileInputStream
Trả lời
Điều này có thể giúp bạn:
http://ostermiller.org/convert_java_outputstream_inputstream.html
Bài viết này đề cập đến 3 khả năng:
- viết đầu ra hoàn chỉnh thành một mảng byte sau đó đọc nó một lần nữa
- ống sử dụng
- sử dụng bộ đệm byte tròn (một phần của thư viện được lưu trữ trên trang đó)
Chỉ cần để tham khảo, làm nó theo chiều ngược lại (đầu vào đến đầu ra):
Một giải pháp đơn giản với Apache Commons IO sẽ là:
IOUtils.copyLarge(InputStream, OutputStream)
hoặc nếu bạn chỉ muốn sao chép tệp:
FileUtils.copyFile(inFile,outFile);
Nếu bạn không muốn sử dụng Apache Commons IO, đây là wha t phương pháp copyLarge
làm:
public static long copyLarge(InputStream input, OutputStream output) throws IOException
{
byte[] buffer = new byte[4096];
long count = 0L;
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
Liên kết bị hỏng, nhưng bạn vẫn có thể tìm thấy câu trả lời gốc tại đây: https://web.archive.org/web /20110929161214/http://ostermiller.org/convert_java_outputstream_inputstream.html – GregT
Nếu bạn có thể sử dụng @Thomas ví dụ đưa ra, nếu không bạn có thể làm:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class FileInputOutputExample {
public static void main(String[] args) throws Exception {
InputStream is = new FileInputStream("in.txt");
OutputStream os = new FileOutputStream("out.txt");
int c;
while ((c = is.read()) != -1) {
System.out.print((char) c);
os.write(c);
}
is.close();
os.close();
}
}
ví dụ từ java2s.com
EDIT:
Như @ Thomas đã xóa câu trả lời của mình, tôi sẽ chỉ thêm tham chiếu Commons IO để xử lý vấn đề này:
IOUtils.copy(InputStream is, OutputStream os)
Tôi không thấy cách này "chuyển đổi một' FileOutputStream' thành 'FileInputStream'." –
Thực ra ví dụ của tôi là vòng khác (đầu vào cho đầu ra), vì vậy tôi đã xóa nó. Nếu nó vẫn còn có liên quan, tôi có thể phục hồi nó để tham khảo. – Thomas
@Mark: đó là sự thật, tôi chỉ cho rằng anh ấy muốn đọc một cái khác vào – Kris
Nếu bạn muốn nói rằng bạn có thể đọc nội dung sau khi viết (không xả đĩa), hãy sử dụng ByteArrayOutputStream và ByteArrayInputStream. Khi bạn đã hoàn thành việc ghi vào ByteArrayOutputStream, bạn có thể lấy dữ liệu byte bên dưới và sử dụng ByteArrayInputStream để đọc nó.
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
// do any output onto outStream you need
ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray());
// you can read back the output with inStream now
Nếu bạn muốn có bộ đệm (nhà sản xuất/vấn đề loại người tiêu dùng), hãy xem Bộ đệm được cung cấp với gói nio của java.
Tôi nhận được một FileOutputStream. Những gì tôi muốn là đọc nó.
Bạn chắc chắn không thể đọc từ số OutputStream
. Tôi nghĩ bạn có nghĩa là bạn muốn đọc từ tập tin được viết bởi FileOutputStream
. Tôi không nghĩ rằng bạn có thể làm điều đó. Các FileOutputStream
dường như không giữ một tham chiếu đến các tập tin được ghi vào.
Những gì bạn cần làm là khám phá những gì File
hoặc đường dẫn (một String
) đã được thông qua vào FileOutputStream
và sử dụng cùng một File
hoặc String
để tạo ra một mới FileInputStream
.
Tôi nghĩ rằng anh ấy có thể sử dụng FileOutputStream.getFD() để lấy FileDescriptor; hơn là xây dựng một FileInputStream xung quanh nó. Không chắc chắn nếu bạn có thể đồng thời đọc và viết từ cùng một FileDescriptor mặc dù. –
@ S.L.Barth: Điểm tốt, tôi đã thực sự nhìn vào đó nhưng bỏ lỡ thực tế là 'FileInputStream' có một hàm tạo có một' FileDescriptor'. –
- 1. JAVA: FileInputStream và FileOutputStream
- 2. FileOutputStream vs ByteArrayOutputStream
- 3. Nhận tên tệp từ FileOutputStream
- 4. Truyền FileInputStream và FileOutputStream tới ffmpeg để chuyển mã (sử dụng Mã hóa Video Âm thanh JAVE-Java)
- 5. Ghi vào FileOutputStream từ nhiều chủ đề trong Java
- 6. FileOutputStream tương đương
- 7. Google AppEngine không hỗ trợ FileOutputStream
- 8. Điều gì về việc đệm tệp FileInputStream?
- 9. Tại sao FileInputStream read() không chặn?
- 10. Xóa các tệp được tạo bằng FileOutputStream
- 11. Tôi có phải đóng FileInputStream không?
- 12. Java FileInputStream ObjectInputStream đến cuối tệp EOF
- 13. Java BufferedWriter, OutputStreamWriter thể viết thư cho FileOutputStream kín
- 14. FileInputStream vs ClassPathResource vs getResourceAsStream và toàn vẹn tệp
- 15. Quyền truy cập bị từ chối khi sử dụng FileOutputStream
- 16. Android: Sự khác biệt giữa FileOutputStream và FileWriter
- 17. Tôi có phải đóng FileOutputStream được gói bởi PrintStream không?
- 18. Java FileOutputStream Tạo Tệp nếu không tồn tại
- 19. là có một FileInputStream hiện có xóa trên đóng?
- 20. Làm thế nào để chuyển đổi InputStream để FileInputStream
- 21. Đọc chuỗi và nhị phân từ cùng một FileInputStream
- 22. Tại sao read() trong FileInputStream trả về một số nguyên?
- 23. Phụ thêm vào ObjectOutputStream
- 24. Làm cách nào để truy cập tệp txt trong một tệp jar bằng FileInputStream?
- 25. Tại thời điểm nào gói một FileOutputStream với một BufferedOutputStream có ý nghĩa, về hiệu suất?
- 26. Cách tham chiếu tệp được bao gồm trong gói OSGi khi thực hiện java.io.File hoặc FileInputStream
- 27. Làm thế nào để ghi dữ liệu với FileOutputStream mà không làm mất dữ liệu cũ?
- 28. Làm cách nào để một FileInputStream có được nội dung của Tệp?
- 29. làm thế nào để đóng FileInputStream trong khi đọc các tập tin bất động sản
- 30. Tệp vào InputStream
Thậm chí bạn có hiểu những gì bạn đang yêu cầu ở đây không? Ý bạn là "chuyển đổi" là gì? Họ về cơ bản là đối diện; một là để đọc và một là viết. Bạn đang cố gắng đọc tệp bạn đang ghi vào trong 'FileOutputStream'? –
Chính xác bạn muốn làm gì? FileOutputStream ghi vào một tệp và một FileInputStream đọc từ một tệp. Tôi không thấy cách cái cũ có thể được biến đổi thành cái sau. –
Tôi nhận được một FileOutputStream. Những gì tôi muốn là đọc nó. – Pen