我如何将java.io.File转换为字节[]?


当前回答

我相信这是最简单的方法:

org.apache.commons.io.FileUtils.readFileToByteArray(file);

其他回答

这是最简单的方法之一

 String pathFile = "/path/to/file";
 byte[] bytes = Files.readAllBytes(Paths.get(pathFile ));

你也可以使用NIO api来实现。只要总文件大小(以字节为单位)适合int类型,我就可以用这段代码做到这一点。

File f = new File("c:\\wscp.script");
FileInputStream fin = null;
FileChannel ch = null;
try {
    fin = new FileInputStream(f);
    ch = fin.getChannel();
    int size = (int) ch.size();
    MappedByteBuffer buf = ch.map(MapMode.READ_ONLY, 0, size);
    byte[] bytes = new byte[size];
    buf.get(bytes);

} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} finally {
    try {
        if (fin != null) {
            fin.close();
        }
        if (ch != null) {
            ch.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我认为它非常快,因为它使用MappedByteBuffer。

以下方法不仅将Java .io. file转换为byte[],我还发现它是读取文件的最快方法,当测试许多不同的Java文件读取方法时:

java.nio.file.Files.readAllBytes ()

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

public class ReadFile_Files_ReadAllBytes {
  public static void main(String [] pArgs) throws IOException {
    String fileName = "c:\\temp\\sample-10KB.txt";
    File file = new File(fileName);

    byte [] fileBytes = Files.readAllBytes(file.toPath());
    char singleChar;
    for(byte b : fileBytes) {
      singleChar = (char) b;
      System.out.print(singleChar);
    }
  }
}

这取决于什么对你来说是最好的。就生产力而言,不要重复工作,而是使用Apache Commons。FileUtils。readFileToByteArray(文件输入)。

import java.io.RandomAccessFile;
RandomAccessFile f = new RandomAccessFile(fileName, "r");
byte[] b = new byte[(int)f.length()];
f.readFully(b);

Java 8文档:http://docs.oracle.com/javase/8/docs/api/java/io/RandomAccessFile.html