在Java中获取文件的字节数组可以通过以下几种方法:
1. 使用`Files.readAllBytes()`方法:
```java
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Path path = Paths.get("C:/temp/test.txt");
byte[] data = Files.readAllBytes(path);
2. 使用`FileInputStream`和`ByteArrayOutputStream`:```javaimport java.io.File;
import java.io.FileInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
File file = new File("C:/temp/test.txt");
byte[] bytes = new byte[(int) file.length()];
try (FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
int buf_size = 1024;
byte[] buffer = new byte[buf_size];
int len;
while ((len = fis.read(buffer, 0, buf_size)) != -1) {
bos.write(buffer, 0, len);
}
bytes = bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
3. 使用`FileChannel`和`MappedByteBuffer`:
```java
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
File file = new File("C:/temp/test.txt");
try (RandomAccessFile raf = new RandomAccessFile(file, "r");
FileChannel channel = raf.getChannel()) {
long fileSize = channel.size();
if (fileSize > Integer.MAX_VALUE) {
System.out.println("File too big...");
return null;
}
MappedByteBuffer buffer = channel.map(MapMode.READ_ONLY, 0, (int) fileSize);
byte[] bytes = new byte[(int) fileSize];
buffer.get(bytes);
return bytes;
} catch (IOException e) {
e.printStackTrace();
}
4. 使用`Apache Commons IO`库:```javaimport org.apache.commons.io.FileUtils;
byte[] fileBytes = FileUtils.readFileToByteArray(new File("C:/temp/test.txt"));
请根据您的具体需求选择合适的方法。需要注意的是,`Files.readAllBytes()`方法会将整个文件读入内存,因此对于大文件可能会导致`OutOfMemoryError`。如果文件非常大,建议使用流式读取方法,如`FileInputStream`和`FileChannel`。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://sigusoft.com/bj/80277.html