我正在制作修改安装程序,一切正常,但我无法弄清楚如何将文件夹复制到JarFile中,该文件夹需要进入jar内的文件夹。这是我失败的尝试。 :(
我的代码:
public class DisplayContent extends JPanel implements ActionListener{
public DisplayContent() {
handleGraphics();
}
public String chosenDir = null;
private void handleGraphics() {
setLayout(null);
JLabel paneTitle = new JLabel();
paneTitle.setFont(new Font("Comic Sans MS", Font.BOLD, 20));
paneTitle.setBounds(55, 6, 330, 62);
paneTitle.setBackground(new Color(237, 237, 237));
paneTitle.setText("The Halo Ultimate Mod Installer");
add(paneTitle);
JButton btnInstall = new JButton("Click Me To Install The Halo Ultimate Mod");
btnInstall.setBounds(16, 139, 414, 47);
btnInstall.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
install(chosenDir);
}
});
add(btnInstall);
final JButton forgeFolder = new JButton("Select Forge Jar File! Important!");
forgeFolder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
chosenDir = getSelectedDir(forgeFolder);
}
});
forgeFolder.setBounds(16, 80, 414, 47);
add(forgeFolder);
}
public void install(String dir) {
String jar = dir + "/assets/";
String absolutePath = new File("").getAbsolutePath();
String halo = absolutePath + "/mods";
try {
copyFile(halo, jar);
} catch (IOException e) {
e.printStackTrace();
}
System.out.print(" --- NEW DIR2 --- " + absolutePath);
System.out.print(" --- NEW DIR --- " + chosenDir);
}
public String getSelectedDir(Component parent){
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode( JFileChooser.FILES_ONLY );
if( fc.showOpenDialog( parent ) == JFileChooser.APPROVE_OPTION )
{
return fc.getSelectedFile().getAbsolutePath();
}
return null;
}
public void actionPerformed(ActionEvent e) {}
public void copyFile(String filenameoriginal, String filenamecopy)throws IOException{
File destFile = new File(filenamecopy);
if (!destFile.exists()) {
destFile.createNewFile();
}
FileChannel fileSource = new FileInputStream(filenameoriginal).getChannel();
FileChannel destination = new FileOutputStream(filenamecopy).getChannel();
destination.transferFrom(fileSource, 0, fileSource.size());
System.out.println("Success.");
if (fileSource != null) {
fileSource.close();
}
if (destination != null) {
destination.close();
}
}
}
答案 0 :(得分:0)
简短的回答是,你不能......
答案很长,你可以,但这并不容易。
基本上,您需要做的是创建一个新的JarFile
,将第一个(原始)Jar中的内容复制到它,而不关闭或最终确定新的JarFile
,将您的新内容添加到它
完成后(并关闭/完成新的JarFile
),删除旧的并将新的移动到其位置
以下示例可能有用......
请记住,Jar文件只是一个带有一些附加功能的Zip;)