如何在Java中将文件转换为字节数组

时间:2020-01-09 10:35:29  来源:igfitidea点击:

这篇文章展示了使用Java将文件转换为字节数组的不同方法。

  • 我们可以使用FileInputStream类的read(byte [] b)方法,该方法从此输入流中读取最多b.length个字节的数据到字节数组中。参见示例。
  • 从Java 7开始,我们可以使用Files.readAllBytes()方法从文件读取所有字节并返回字节数组。参见示例。
  • Apache CommonsIO还具有方法IOUtils.toByteArray和FileUtils.readFileToByteArray将文件转换为字节数组。要使用它,我们必须将CommonsIO jar放入项目的类路径中。参见示例。

Java程序将文件转换为字节数组

让我们看一下使用上述选项在Java中将文件转换为字节数组的示例。

使用FileInputStream类的read方法

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;

public class FileToBytearray {
  public static void main(String[] args) {
    File file = new File("D:\test.txt");
    byte[] bArray = convertFileToByteArray(file);
    System.out.print(Arrays.toString(bArray));
  }
	
  private static byte[] convertFileToByteArray(File file){
    FileInputStream fis = null;
    // Creating bytearray of same length as file
    byte[] bArray = new byte[(int) file.length()];
    try{
      fis = new FileInputStream(file);
      // Reading file content to byte array
      fis.read(bArray);
      fis.close();                    
    }catch(IOException ioExp){
      ioExp.printStackTrace();
    }finally{
      if(fis != null){
        try {
          fis.close();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
    return bArray;
  }
}

输出:

[49, 48, 48, 49, 124, 49, 48, 48, 51, 124, 50, 48, 48, 48, 13, 10, 49, 
48, 48, 54, 124, 50, 48, 48, 52, 124, 51, 48, 48, 48, 13, 10, 49, 48, 
48, 53, 124, 49, 48, 48, 55, 124, 49, 48, 48, 48, 48, 13, 10, 84, 104, 
105, 115, 32, 105, 115, 32, 97, 32, 116, 101, 115, 116, 32, 108, 105, 
110, 101, 46, 10, 76, 105, 110, 101, 32, 119, 114, 105, 116, 116, 101, 
110, 32, 98, 121, 32, 74, 97, 118, 97, 32, 112, 114, 111, 103, 114, 97, 
109, 32, 105, 110, 32, 107, 110, 112, 67, 111, 100, 101, 46, 99, 111, 
109, 46]

如我们所见,输出是一系列字节。

使用Files.readAllBytes()方法将文件转换为字节数组

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;

public class FileToBytearray {
  public static void main(String[] args) {       
    Path path = Paths.get("D:\test.txt");
    try {
      byte[] bArray = Files.readAllBytes(path);
      System.out.println(Arrays.toString(bArray));
    } catch (IOException e) {
      System.out.println("Error while converting " + e.getMessage());
    }    
  }
}

使用Apache CommonsIO实用程序方法

如前所述,如果使用Apache CommonsIO,可以使用两种方法将文件转换为字节数组。

  • IOUtils.toByteArray –此方法将FileInputStream对象作为参数。
  • FileUtils.readFileToByteArray –将File实例作为参数传递。

使用IOUtile.toByteArray

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import org.apache.commons.io.IOUtils;

public class FileToBytearray {
  public static void main(String[] args) {       
    File file = new File("D:\test.txt");
    try(FileInputStream fis = new FileInputStream(file)) {
      byte[] bArray;
      bArray = IOUtils.toByteArray(fis);
      System.out.println(Arrays.toString(bArray));
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

使用FileUtils.readFileToByteArray

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import org.apache.commons.io.FileUtils;

public class FileToBytearray {
  public static void main(String[] args) {       
    File file = new File("D:\test.txt");
    byte[] bArray;
    try {
      bArray = FileUtils.readFileToByteArray(file);
      System.out.println(Arrays.toString(bArray));
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }	
  }
}