从 java 项目资源复制目录和文件
Copy directory and files from java project resource
我需要复制位于我的 java 项目中的目录 "src" 作为公共资源。此 "src" 文件夹包含其他子文件夹和文件,因此我也需要复制它们。我怎样才能实现这样的目标?
我面临的主要问题是我无法检索 "src" 文件夹的绝对路径。
一个解决方案是逐个文件复制,但它们太多了,我想找到更好的解决方案
谢谢
编辑:
当用户单击 "Generate" 按钮时,我的应用程序会向用户询问生成一些文件的目标位置。此目标位置是我要复制我的 "src" 文件夹及其所有子文件夹的位置。 "src" 文件夹,如上所述,位于我的 java 项目主文件夹中。
如果您想从 jar 文件中提取源代码,您可以从这个简短的示例开始
public class UnZip {
public static void main(String argv[]) {
String destDir = "/tmp/";
String sourceJar = "your_src.jar";
try (ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceJar)))) {
ZipEntry zipEntry;
while ((zipEntry = zis.getNextEntry()) != null) {
File newDestination = new File(destDir + zipEntry.getName());
if (zipEntry.isDirectory()) {
unzipDir(newDestination);
} else {
unzipFile(newDestination, zis);
}
}
} catch (IOException ex) {
System.err.println("input file coud not be read " + ex.getMessage());
}
}
private static void unzipFile(File file, final ZipInputStream zis) {
System.out.printf("extract to: %s - ", file.getAbsoluteFile());
if (file.exists()) {
System.out.println("already exist");
return;
}
int count;
try (BufferedOutputStream dest = new BufferedOutputStream(new FileOutputStream(file), BUFFER_SIZE)) {
while ((count = zis.read(BUFFER, 0, BUFFER_SIZE)) != -1) {
dest.write(BUFFER, 0, count);
}
dest.flush();
System.out.println("");
} catch (IOException ex) {
System.err.println("file could not be created " + ex.getMessage());
}
}
private static void unzipDir(File dir) {
System.out.printf("create directory: %s - ", dir);
if (dir.exists()) {
System.out.println("already exist");
} else if (dir.mkdirs()) {
System.out.println("successful");
} else {
System.out.println("failed");
}
}
static final int BUFFER_SIZE = 2048;
static byte[] BUFFER = new byte[BUFFER_SIZE];
}
我解决了创建我需要生成的应用程序的 zip 存档的问题。然后从我的项目中解压缩从资源文件夹中获取的存档,然后打开我需要修改的 java 文件的流并对其进行编辑。
这是代码,类似于次优的解决方案
UnzipUtility unzipper = new UnzipUtility();
InputStream inputStream = getClass()
.getResource("/template/template.zip").openConnection()
.getInputStream();
unzipper.unzip(inputStream, parentFolder.getCanonicalPath());
UnzipUtility class 来自这个例子:http://www.codejava.net/java-se/file-io/programmatically-extract-a-zip-file-using-java
我需要复制位于我的 java 项目中的目录 "src" 作为公共资源。此 "src" 文件夹包含其他子文件夹和文件,因此我也需要复制它们。我怎样才能实现这样的目标? 我面临的主要问题是我无法检索 "src" 文件夹的绝对路径。 一个解决方案是逐个文件复制,但它们太多了,我想找到更好的解决方案
谢谢
编辑: 当用户单击 "Generate" 按钮时,我的应用程序会向用户询问生成一些文件的目标位置。此目标位置是我要复制我的 "src" 文件夹及其所有子文件夹的位置。 "src" 文件夹,如上所述,位于我的 java 项目主文件夹中。
如果您想从 jar 文件中提取源代码,您可以从这个简短的示例开始
public class UnZip {
public static void main(String argv[]) {
String destDir = "/tmp/";
String sourceJar = "your_src.jar";
try (ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceJar)))) {
ZipEntry zipEntry;
while ((zipEntry = zis.getNextEntry()) != null) {
File newDestination = new File(destDir + zipEntry.getName());
if (zipEntry.isDirectory()) {
unzipDir(newDestination);
} else {
unzipFile(newDestination, zis);
}
}
} catch (IOException ex) {
System.err.println("input file coud not be read " + ex.getMessage());
}
}
private static void unzipFile(File file, final ZipInputStream zis) {
System.out.printf("extract to: %s - ", file.getAbsoluteFile());
if (file.exists()) {
System.out.println("already exist");
return;
}
int count;
try (BufferedOutputStream dest = new BufferedOutputStream(new FileOutputStream(file), BUFFER_SIZE)) {
while ((count = zis.read(BUFFER, 0, BUFFER_SIZE)) != -1) {
dest.write(BUFFER, 0, count);
}
dest.flush();
System.out.println("");
} catch (IOException ex) {
System.err.println("file could not be created " + ex.getMessage());
}
}
private static void unzipDir(File dir) {
System.out.printf("create directory: %s - ", dir);
if (dir.exists()) {
System.out.println("already exist");
} else if (dir.mkdirs()) {
System.out.println("successful");
} else {
System.out.println("failed");
}
}
static final int BUFFER_SIZE = 2048;
static byte[] BUFFER = new byte[BUFFER_SIZE];
}
我解决了创建我需要生成的应用程序的 zip 存档的问题。然后从我的项目中解压缩从资源文件夹中获取的存档,然后打开我需要修改的 java 文件的流并对其进行编辑。 这是代码,类似于次优的解决方案
UnzipUtility unzipper = new UnzipUtility();
InputStream inputStream = getClass()
.getResource("/template/template.zip").openConnection()
.getInputStream();
unzipper.unzip(inputStream, parentFolder.getCanonicalPath());
UnzipUtility class 来自这个例子:http://www.codejava.net/java-se/file-io/programmatically-extract-a-zip-file-using-java