读取项目打包后jar中的文件
Idea中maven项目的结构如下
以下为读取打包完成后jar包中res.txt文件代码
package test.dynamicProxy;
import java.io.*;
import java.net.URL;
import java.util.Arrays;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public class TestMain {
static byte[] JAR_MGIC = new byte[]{80, 75, 3, 4};
static String JAR_FILE_PREFIX = "jar:file:/";
public static boolean containedByJar(URL url) {
if(url.getFile().lastIndexOf(".jar") >= 0) {
return true;
}
return false;
}
public static boolean isJar(URL url) {
String filePath = url.getFile();
System.out.println(filePath);
if(filePath.lastIndexOf(".jar") >= 0) {
InputStream inputStream = null;
try {
inputStream = url.openStream();
int length = JAR_MGIC.length;
byte[] buffer = new byte[length];
inputStream.read(buffer,0,length);
if(Arrays.equals(JAR_MGIC,buffer)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(null != inputStream) {
inputStream.close();
}
}catch (Exception e) {
e.printStackTrace();
}
}
} else {
return true;
}
return false;
}
static String externalFormToFilePath(String externalForm) {
externalForm = externalForm.substring(externalForm.indexOf(JAR_FILE_PREFIX)+ JAR_FILE_PREFIX.length(),externalForm.lastIndexOf("!"));
return externalForm;
}
public static void main(String[] args) throws Exception {
URL url = TestMain.class.getClassLoader().getResource("org/");
String externalForm = url.toExternalForm();
System.out.println(externalForm);
String filePath = externalFormToFilePath(externalForm);
System.out.println(filePath);
JarFile jarFile = null;
InputStream inputStream = null;
if(containedByJar(url)) {
jarFile = new JarFile(filePath);
JarEntry jarEntry = jarFile.getJarEntry("bin/res.txt");
InputStream is = jarFile.getInputStream(jarEntry);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
if(null != reader) {
reader.close();
}
if(null != is) {
is.close();
}
if(null != jarFile) {
jarFile.close();
}
}
}
}
- java.net.URL的api参考 java.net.URL api