我需要复制位于我的java项目中的目录“src”作为公共资源。这个“src”文件夹包含其他子文件夹和文件,所以我也需要复制它们。我怎样才能实现这样的目标? 我面临的主要问题是我无法检索“src”文件夹的绝对路径。 一个解决方案是逐个文件复制,但它们太多了,我想找到一个更好的解决方案
谢谢
编辑: 当用户单击“生成”按钮时,我的应用程序会向用户询问生成某些文件的目标位置。这个目标位置是我想要复制我的“src”文件夹及其所有子项的位置。如上所述,“src”文件夹位于我的java项目主文件夹中。
答案 0 :(得分:0)
如果要从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];
}
答案 1 :(得分:0)
我解决了创建我需要生成的应用的zip存档的问题。然后从我的项目中解压缩从资源文件夹中获取的这个存档,之后我打开我需要修改的java文件流并编辑它。 这是代码,类似于SubOptimal的解决方案
UnzipUtility unzipper = new UnzipUtility();
InputStream inputStream = getClass()
.getResource("/template/template.zip").openConnection()
.getInputStream();
unzipper.unzip(inputStream, parentFolder.getCanonicalPath());
UnzipUtility类来自此示例:http://www.codejava.net/java-se/file-io/programmatically-extract-a-zip-file-using-java