Qual è il modo più semplice per convertire un FileOutputStream in FileInputStream (una parte di codice sarebbe ottima)?FileOutputStream in FileInputStream
risposta
Questo potrebbe aiutare:
http://ostermiller.org/convert_java_outputstream_inputstream.html
Questo articolo cita 3 possibilità:
- scrivere l'output completo in un array di byte poi leggerlo di nuovo
- usa pipe
- utilizzare un buffer di byte circolare (parte di una libreria ospitata su quella pagina)
Solo per riferimento, facendo il contrario (ingresso e uscita):
Una soluzione semplice con Apache Commons IO sarebbe:
IOUtils.copyLarge(InputStream, OutputStream)
o se semplicemente vuole copiare un file:
FileUtils.copyFile(inFile,outFile);
Se non si desidera utilizzare Apache Commons IO, ecco wha t il metodo copyLarge
fa:
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;
}
Il collegamento è rotto, ma è ancora possibile trovare la risposta originale qui: https://web.archive.org/web /20110929161214/http://ostermiller.org/convert_java_outputstream_inputstream.html – GregT
Se è possibile utilizzare @Thomas esempio dato, altrimenti si può fare:
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();
}
}
esempio da java2s.com
EDIT:
Come @Thomas ha cancellato la sua risposta, aggiungerò solo per riferimento all'approccio IO di Commons per la gestione di questo:
IOUtils.copy(InputStream is, OutputStream os)
Non riesco a vedere come questo "converta un file FileOutputStream in un FileInputStream". –
In realtà il mio esempio era il contrario (input per output), quindi l'ho eliminato. Se è ancora rilevante, potrei ripristinarlo come riferimento. – Thomas
@Mark: è vero, ho appena pensato di voler leggere l'uno nell'altro – Kris
Se si intende che si desidera poter leggere il contenuto dopo aver scritto (senza eseguire il flush su disco), utilizzare un ByteArrayOutputStream e un ByteArrayInputStream. Una volta terminato di scrivere su ByteArrayOutputStream, è possibile ottenere i dati di byte sottostanti e utilizzare un ByteArrayInputStream per leggerlo di nuovo.
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
Se si desidera un buffer (produttore/consumatore tipo di problema riscontrato), esaminare i buffer forniti con il pacchetto nio di java.
Ricevo un FileOutputStream. Quello che voglio è leggerlo.
Non è possibile leggere da uno OutputStream
. Penso che vuoi dire che vuoi leggere dal file che stai scrivendo dal FileOutputStream
. Non penso che tu possa farlo neanche io. Il FileOutputStream
non sembra mantenere un riferimento al file in fase di scrittura.
Quello che dovete fare è scoprire ciò che File
o il percorso (un String
) è stata approvata nel FileOutputStream
e utilizzare lo stesso File
o String
per creare un nuovo FileInputStream
.
Penso che potrebbe usare FileOutputStream.getFD() per ottenere il FileDescriptor; di creare un FileInputStream attorno ad esso. Non sono sicuro se sia possibile leggere e scrivere contemporaneamente dallo stesso FileDescriptor. –
@ S.L.Barth: buon punto, in realtà l'avevo esaminato, ma ho perso il fatto che 'FileInputStream' ha un costruttore che accetta un' FileDescriptor'. –
- 1. JAVA: FileInputStream e FileOutputStream
- 2. Passaggio di FileInputStream e FileOutputStream a ffmpeg in transcodifica (utilizzando la codifica audio-video Java-Java)
- 3. FileInputStream Android read() txt file in stringa
- 4. Equivalente FileOutputStream
- 5. Ottieni il nome del file da FileOutputStream
- 6. FileWriter vs FileOutputStream in Java
- 7. Google AppEngine non sostenere FileOutputStream
- 8. È necessario convertire AssetInputStream in FileInputStream
- 9. Android FileOutputStream posizione Salva file
- 10. Come convertire InputStream per FileInputStream
- 11. Qual è la differenza nell'uso di InputStream invece di FileInputStream durante la creazione dell'oggetto FileInputStream
- 12. Serialize DOM to FileOutputStream usando Xerces
- 13. Java FileOutputStream Crea file se non esiste
- 14. Eliminazione di file creati con FileOutputStream
- 15. esiste una eliminazione FileInputStream esistente alla chiusura?
- 16. FileInputStream per un file generico Sistema
- 17. Android: Differenza tra FileOutputStream e FileWriter
- 18. Java BufferedWriter, OutputStreamWriter in grado di scrivere a FileOutputStream chiuso
- 19. Devo chiudere FileOutputStream che è stato avvolto da PrintStream?
- 20. È sicuro accedere allo stesso file da più FileInputStream?
- 21. FileInputStream vs ClassPathResource vs getResourceAsStream e file integrità
- 22. È Java FileInputStream Locking File per la scrittura
- 23. Come può un FileInputStream ottenere il contenuto di File?
- 24. Come scrivere dati con FileOutputStream senza perdere i vecchi dati?
- 25. Come arrivare FileInputStream di file nella cartella di asset
- 26. A che punto avvolgere un FileOutputStream con un BufferedOutputStream ha senso, in termini di prestazioni?
- 27. Come posso accedere a un file txt in un jar con FileInputStream?
- 28. In che modo la chiusura di un FileInputStream può causare un errore "Spazio vuoto sul dispositivo"?
- 29. Come fare riferimento a un file incluso nel pacchetto OSGi quando si esegue java.io.File o FileInputStream
- 30. Analizzatore anomalo di Java (File), ma Scanner (FIleInputStream) funziona sempre con lo stesso file
Hai mai capito cosa stai chiedendo qui? Cosa intendi per "convertire"? Sono fondamentalmente cose opposte; uno è per la lettura e l'altro è per la scrittura. Stai cercando di leggere il file in cui stai scrivendo in "FileOutputStream"? –
Che cosa esattamente vuoi fare? Un FileOutputStream scrive su un file e un FileInputStream legge da un file. Non riesco a vedere come il primo possa essere convertito in quest'ultimo. –
Ricevo un FileOutputStream. Quello che voglio è leggerlo. – Pen