studio example ejemplo createtempfile create java android file file-io

example - Manera elegante de leer el archivo en la matriz de bytes[] en Java



internal storage android example (6)

Posible duplicado:
Archivo a byte [] en Java

Quiero leer datos del archivo y descomprimirlo en Parcel. En la documentación no está claro, FileInputStream tiene un método para leer todo su contenido. Para implementar esto, hago lo siguiente:

FileInputStream filein = context.openFileInput(FILENAME); int read = 0; int offset = 0; int chunk_size = 1024; int total_size = 0; ArrayList<byte[]> chunks = new ArrayList<byte[]>(); chunks.add(new byte[chunk_size]); //first I read data from file chunk by chunk while ( (read = filein.read(chunks.get(chunks.size()-1), offset, buffer_size)) != -1) { total_size+=read; if (read == buffer_size) { chunks.add(new byte[buffer_size]); } } int index = 0; // then I create big buffer byte[] rawdata = new byte[total_size]; // then I copy data from every chunk in this buffer for (byte [] chunk: chunks) { for (byte bt : chunk) { index += 0; rawdata[index] = bt; if (index >= total_size) break; } if (index>= total_size) break; } // and clear chunks array chunks.clear(); // finally I can unmarshall this data to Parcel Parcel parcel = Parcel.obtain(); parcel.unmarshall(rawdata,0,rawdata.length);

Creo que este código parece feo, y mi pregunta es: ¿Cómo puedo leer los datos de un archivo en byte [] maravillosamente? :)


Hace mucho tiempo:

Llame a cualquiera de estos

byte[] org.apache.commons.io.FileUtils.readFileToByteArray(File file) byte[] org.apache.commons.io.IOUtils.toByteArray(InputStream input)

De

http://commons.apache.org/io/

Si la superficie de la biblioteca es demasiado grande para su aplicación de Android, puede usar las clases relevantes de la biblioteca commons-io

Hoy (Java 7+ o Android API Nivel 26+)

Afortunadamente, ahora tenemos un par de métodos de conveniencia en los paquetes nio. Por ejemplo:

byte[] java.nio.file.Files.readAllBytes(Path path)

Javadoc aquí


Eche un vistazo a la siguiente función de Apache commons:

org.apache.commons.io.FileUtils.readFileToByteArray(File)


Esto funciona para mí:

File file = ...; byte[] data = new byte[(int) file.length()]; try { new FileInputStream(file).read(data); } catch (Exception e) { e.printStackTrace(); }


Esto también funcionará:

import java.io.*; public class IOUtil { public static byte[] readFile(String file) throws IOException { return readFile(new File(file)); } public static byte[] readFile(File file) throws IOException { // Open file RandomAccessFile f = new RandomAccessFile(file, "r"); try { // Get and check length long longlength = f.length(); int length = (int) longlength; if (length != longlength) throw new IOException("File size >= 2 GB"); // Read file and return data byte[] data = new byte[length]; f.readFully(data); return data; } finally { f.close(); } } }



Use un ByteArrayOutputStream . Aquí está el proceso:

  • Obtener un InputStream para leer datos
  • Crea un ByteArrayOutputStream .
  • Copie todo el InputStream en el OutputStream
  • Obtenga su byte[] del ByteArrayOutputStream usando el método toByteArray()