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 に答える