将文件夹复制到jar中

时间:2013-08-17 02:59:51

标签: java jar copy directory

我正在制作修改安装程序,一切正常,但我无法弄清楚如何将文件夹复制到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();
      }
}
}

1 个答案:

答案 0 :(得分:0)

简短的回答是,你不能......

答案很长,你可以,但这并不容易。

基本上,您需要做的是创建一个新的JarFile,将第一个(原始)Jar中的内容复制到它,而不关闭或最终确定新的JarFile,将您的新内容添加到它

完成后(并关闭/完成新的JarFile),删除旧的并将新的移动到其位置

以下示例可能有用......

请记住,Jar文件只是一个带有一些附加功能的Zip;)