metodos - fin de archivo en java
¿Cómo crear ByteArrayInputStream desde un archivo en Java? (5)
Tengo un archivo que puede ser cualquier cosa como ZIP, RAR, txt, CSV, doc, etc. Me gustaría crear un ByteArrayInputStream a partir de él.
Lo estoy usando para cargar un archivo a FTP a través de FTPClient desde Apache Commons Net.
¿Alguien sabe cómo hacerlo?
Por ejemplo:
String data = "hdfhdfhdfhd";
ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
Mi código:
public static ByteArrayInputStream retrieveByteArrayInputStream(File file) {
ByteArrayInputStream in;
return in;
}
Esta pieza de código es útil:
private static byte[] readContentIntoByteArray(File file)
{
FileInputStream fileInputStream = null;
byte[] bFile = new byte[(int) file.length()];
try
{
//convert file into array of bytes
fileInputStream = new FileInputStream(file);
fileInputStream.read(bFile);
fileInputStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return bFile;
}
Referencia: http://howtodoinjava.com/2014/11/04/how-to-read-file-content-into-byte-array-in-java/
Esto no es exactamente lo que está preguntando, pero es una forma rápida de leer archivos en bytes.
File file = new File(yourFileName);
RandomAccessFile ra = new RandomAccessFile(yourFileName, "rw"):
byte[] b = new byte[(int)file.length()];
try {
ra.read(b);
} catch(Exception e) {
e.printStackTrace();
}
//Then iterate through b
La idea general es que un archivo produciría un FileInputStream
y un byte[]
un ByteArrayInputStream
. Ambos implementan InputStream
por lo que deberían ser compatibles con cualquier método que use InputStream
como parámetro.
Por supuesto, se puede colocar todo el contenido del archivo en un ByteArrayInputStream
:
- leer en el archivo completo en un
byte[]
; La versión de Java> = 7 contiene un método conveniente llamadoreadAllBytes
para leer todos los datos de un archivo; - cree un
ByteArrayInputStream
alrededor del contenido del archivo, que ahora está en la memoria.
Tenga en cuenta que esta puede no ser la solución óptima para archivos muy grandes: todos los archivos se almacenarán en la memoria en el mismo momento. Es importante usar el flujo adecuado para el trabajo.
Un ByteArrayInputStream
es un contenedor de InputStream
alrededor de una matriz de bytes. Esto significa que tendrá que leer completamente el archivo en un byte[]
y luego usar uno de los constructores ByteArrayInputStream
.
¿Puede dar más detalles de lo que está haciendo con ByteArrayInputStream
? Es probable que haya mejores maneras de evitar lo que estás tratando de lograr.
Editar:
Si está utilizando Apache FTPClient para cargar, solo necesita un InputStream
. Puedes hacerlo;
String remote = "whatever";
InputStream is = new FileInputStream(new File("your file"));
ftpClient.storeFile(remote, is);
Por supuesto, debe recordar cerrar la secuencia de entrada una vez que haya terminado con ella.
Use FileUtils#readFileToByteArray(File)
de Apache Commons IO , y luego cree ByteArrayInputStream
usando el constructor ByteArrayInputStream(byte[])
.
public static ByteArrayInputStream reteriveByteArrayInputStream(File file) {
return new ByteArrayInputStream(FileUtils.readFileToByteArray(file));
}