Java文件访问日常使用中主要分为:
1、本地文件访问
2、Jar包内文件访问
1、本地文件访问
本地文件访问分为绝对路径与相对路径两种情况:
绝对路径:
String absolutePath = "file:///D:/local/file.txt";
byte[] cLassBytes = null;
Path path = null;
try {
path = Paths.get(new URI(classPath));
cLassBytes = Files.readAllBytes(path);
System.out.println("file size " +cLassBytes.length);
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
相对路径:
String relativePath = "local/file.txt";
try {
FileInputStream inputStream = new FileInputStream((classPath));
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[1024];
int len = 0;
while ((len = inputStream.read(buff, 0, 1024)) > 0) {
swapStream.write(buff, 0, len);
}
byte[] bytes = swapStream.toByteArray();
System.out.println("file size " +bytes.length);
} catch (IOException e) {
e.printStackTrace();
}
2、Jar包内文件访问
try {
//jar包内文件路径根目录为BOOT-INF\classes
//如访问BOOT-INF\classes\test\test.txt
//path为"/test/test.txt"
//jar包内文件只能使用流接口
String path = "/application.properties";
InputStream inputStream = getClass().getResourceAsStream(path);
{
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[1024];
int len = 0;
while ((len = inputStream.read(buff, 0, 1024)) > 0) {
swapStream.write(buff, 0, len);
}
byte[] bytes = swapStream.toByteArray();
System.out.println("properties: " + new String(bytes, "UTF-8"));
}
} catch (IOException e) {
e.printStackTrace();
}