Jaki jest najprostszy sposób przekonwertowania pliku FileOutputStream na FileInputStream (kawałek kodu byłby świetny)?FileOutputStream do FileInputStream
Odpowiedz
To może pomóc:
http://ostermiller.org/convert_java_outputstream_inputstream.html
Ten artykuł wymienia 3 możliwości:
- napisać kompletne wyjście do tablicy bajtów następnie ponownie
- zastosowania rur
- ją przeczytać użyj okrągłego bufora bajtowego (część biblioteki hostowanej na tej stronie)
tylko w celach informacyjnych, robi to na odwrót (wejścia do wyjścia):
Prostym rozwiązaniem z Apache Commons IO będzie:
IOUtils.copyLarge(InputStream, OutputStream)
lub jeśli po prostu chcesz skopiować plik:
FileUtils.copyFile(inFile,outFile);
Jeśli nie chcesz używać Apache Commons IO, oto co t metoda copyLarge
robi:
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;
}
Link jest uszkodzony, ale nadal możesz znaleźć oryginalną odpowiedź tutaj: https://web.archive.org/web /20110929161214/http://ostermiller.org/convert_java_outputstream_inputstream.html – GregT
Jeśli można użyć przykładu @Thomas podane, w przeciwnym razie można zrobić:
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();
}
}
przykład z java2s.com
EDIT:
As @Thomas skasował jego odpowiedź, dodam tylko dla odniesienia Commons IO podejście do obchodzenia się z tym:
IOUtils.copy(InputStream is, OutputStream os)
Nie widzę, jak to "konwertuje" FileOutputStream' na "FileInputStream". " –
W rzeczywistości mój przykład był odwrotny (wejście do wyjścia), więc usunąłem go. Jeśli nadal jest to istotne, mogę cofnąć usunięcie w celu odniesienia. – Thomas
@ Mark: To prawda, po prostu założyłem, że chce przeczytać jedną z pozostałych – Kris
Jeśli chcesz mieć możliwość odczytania zawartości po zapisaniu (bez opróżniania dysku), użyj ByteArrayOutputStream i ByteArrayInputStream. Gdy skończysz pisać do ByteArrayOutputStream, możesz pobrać bazowe dane bajtów i użyć ByteArrayInputStream, aby je odczytać.
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
Jeśli chcesz bufor (problem producenta/konsumenta), zajrzyj do buforów dostarczonych z pakietem nio java.
Otrzymuję FileOutputStream. To, czego chcę, to przeczytać.
Z pewnością nie można odczytać z poziomu OutputStream
. Myślę, że masz na myśli, że chcesz przeczytać z pliku zapisanego przez FileOutputStream
. Nie sądzę, że możesz to zrobić. Wydaje się, że FileOutputStream
nie zachowuje odniesienia do pliku, do którego zapisano.
Co trzeba zrobić, to dowiedzieć się, co File
lub ścieżka (a String
) został przekazany do FileOutputStream
i użyć tej samej File
lub String
, aby utworzyć nowy FileInputStream
.
Myślę, że mógłby użyć FileOutputStream.getFD(), aby uzyskać FileDescriptor; niż zbudować wokół niego FileInputStream. Nie jestem pewien, czy możesz jednocześnie czytać i pisać z tego samego pliku FileDescriptor. –
@ S.L.Barth: Dobra sprawa, faktycznie to sprawdziłem, ale brakowało mi faktu, że 'FileInputStream' ma konstruktor, który przyjmuje' FileDescriptor'. –
- 1. JAVA: FileInputStream i FileOutputStream
- 2. Przekazywanie FileInputStream i FileOutputStream do ffmpeg w celu transkodowania (przy użyciu JAVE-Java Audio Video Encoding)
- 3. FileOutputStream vs ByteArrayOutputStream
- 4. Uzyskaj nazwę pliku od FileOutputStream
- 5. Jak przekonwertować InputStream do FileInputStream
- 6. Odpowiednik FileOutputStream
- 7. Serialize DOM do FileOutputStream przy użyciu Xerces
- 8. Konwersja pliku AssetInputStream na FileInputStream
- 9. Plik zapisu lokalizacji Android FileOutputStream
- 10. FileWriter vs FileOutputStream w Javie
- 11. FileInputStream dla ogólnego pliku System
- 12. Jak przekonwertować FileInputStream na ciąg w java?
- 13. Dlaczego read() w FileInputStream zwraca liczbę całkowitą?
- 14. czy istnieje istniejący błąd FileInputStream przy zamknięciu?
- 15. jaka jest różnica w korzystaniu z InputStream zamiast FileInputStream podczas tworzenia obiektu FileInputStream
- 16. Java BufferedWriter, OutputStreamWriter możliwość zapisu zamkniętym FileOutputStream
- 17. Dostęp jest zabroniony podczas korzystania z FileOutputStream
- 18. Jak napisać nową linię w Java FileOutputStream
- 19. Java FileOutputStream Utwórz plik, jeśli nie istnieje
- 20. Android: Różnica między FileOutputStream i FileWriter
- 21. FileInputStream vs ClassPathResource vs getResourceAsStream i złożyć integralności
- 22. W jaki sposób FileInputStream może uzyskać zawartość pliku?
- 23. Jak zapisywać dane przy użyciu FileOutputStream bez utraty starych danych?
- 24. Dlaczego użycie BufferedInputStream do odczytywania bajtu pliku przez bajt jest szybsze niż użycie FileInputStream?
- 25. Czy bezpieczny jest dostęp do tego samego pliku przez kilka FileInputStream?
- 26. Podziel i dołącz plik binarny do java
- 27. W którym momencie jest pakowanie FileOutputStream z sensie BufferedOutputStream, pod względem wydajności?
- 28. Java Scanner (plik) działa niewłaściwie, ale skaner (FIleInputStream) zawsze działa z tym samym plikiem
- 29. W jaki sposób zamknięcie obiektu FileInputStream może spowodować błąd "Brak miejsca na urządzeniu?"
- 30. Jak używać FileChannel do dołączania zawartości jednego pliku na końcu innego pliku?
Czy rozumiesz o co tu chodzi? Co masz na myśli "przekonwertować"? Są to zasadniczo przeciwne rzeczy; jeden jest do czytania, a drugi do pisania. Czy próbujesz odczytać plik, do którego piszesz w swoim 'FileOutputStream'? –
Co dokładnie chcesz zrobić? FileOutputStream zapisuje do pliku, a FileInputStream odczytuje z pliku. Nie rozumiem, w jaki sposób ten pierwszy mógł zostać przekształcony w drugie. –
Otrzymuję FileOutputStream. To, czego chcę, to przeczytać. – Pen