0

我正在制作一个修改安装程序,一切正常,但我不知道如何将文件夹复制到 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();
      }
}
}
4

1 回答 1

0

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

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

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

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

以下示例可能被证明是有用的......

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

于 2013-08-17T03:06:18.713 回答