//************************************************************* // 外部アーカイブの利用テスト // 「OuterJarTest2」 // //          作 成 者:ルート高菜    //          作成開始月:2009/11 //          最終更新月:2009/11 [TN121/J111] //************************************************************* import java.applet.Applet; import java.applet.AudioClip; import java.awt.BorderLayout; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.InputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextArea; public class OuterJarTest2 extends JPanel implements ActionListener { //Eclipseの場合、シリアライズ可能クラスでこれがないと警告が出る private static final long serialVersionUID=0; // static final String TARGET_JAR="target"+File.separator+"target.jar"; static final String TARGET_ZIP="target"+File.separator+"target.zip"; // static final String TEXT="target.txt"; static final String IMAGE="target.jpg"; static final String SOUND_MID="5x_days.mid"; static final String SOUND_WAV="283.wav"; static final String SOUND_AU="finalrain.au"; // static final String TMP_FOLDER="_tmp_"; //作業フォルダ名 // //------------------------------------------------------------------ // public static void main(String[] args) { JFrame frame=new JFrame(); frame.getContentPane().add(new OuterJarTest2()); frame.setTitle("OuterJarTest2"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //右上×印で終了 frame.setSize(750,150); frame.setVisible(true); frame.setLocationRelativeTo(null); //画面の真ん中に表示 } //------------------------------------------------------------------ // File targetJar; File targetZip; // JButton buttonTextJar=new JButton(TEXT); JButton buttonImageJar=new JButton(IMAGE); JButton buttonSoundMidJar=new JButton(SOUND_MID); JButton buttonSoundWavJar=new JButton(SOUND_WAV); JButton buttonSoundAuJar=new JButton(SOUND_AU); // JButton buttonTextZip=new JButton(TEXT); JButton buttonImageZip=new JButton(IMAGE); JButton buttonSoundMidZip=new JButton(SOUND_MID); JButton buttonSoundWavZip=new JButton(SOUND_WAV); JButton buttonSoundAuZip=new JButton(SOUND_AU); //------------------------------------------------------------------コンストラクタ // public OuterJarTest2(){ // targetJar=new File(System.getProperty("user.dir")+File.separator+TARGET_JAR); targetZip=new File(System.getProperty("user.dir")+File.separator+TARGET_ZIP); // JPanel panelJar=new JPanel(); panelJar.add(new JLabel(TARGET_JAR+"内の各ファイルを取り出す")); panelJar.add(buttonTextJar); panelJar.add(buttonImageJar); panelJar.add(buttonSoundMidJar); panelJar.add(buttonSoundWavJar); panelJar.add(buttonSoundAuJar); // JPanel panelZip=new JPanel(); panelZip.add(new JLabel(TARGET_ZIP+"内の各ファイルを取り出す")); panelZip.add(buttonTextZip); panelZip.add(buttonImageZip); panelZip.add(buttonSoundMidZip); panelZip.add(buttonSoundWavZip); panelZip.add(buttonSoundAuZip); // add(panelJar,BorderLayout.NORTH); add(panelZip,BorderLayout.SOUTH); // buttonTextJar.addActionListener(this); buttonImageJar.addActionListener(this); buttonSoundMidJar.addActionListener(this); buttonSoundWavJar.addActionListener(this); buttonSoundAuJar.addActionListener(this); // buttonTextZip.addActionListener(this); buttonImageZip.addActionListener(this); buttonSoundMidZip.addActionListener(this); buttonSoundWavZip.addActionListener(this); buttonSoundAuZip.addActionListener(this); } //------------------------------------------------------------------イベント // public void actionPerformed(ActionEvent e) { if(!targetJar.exists()){ JOptionPane.showMessageDialog(this,TARGET_JAR+"が見つかりません","エラー",JOptionPane.ERROR_MESSAGE); return; } if(!targetZip.exists()){ JOptionPane.showMessageDialog(this,TARGET_ZIP+"が見つかりません","エラー",JOptionPane.ERROR_MESSAGE); return; } // Object object=e.getSource(); //JAR if(object==buttonTextJar){ String str=getTextFromJar(targetJar,TEXT); if(str!=null){ showTextFrame(TARGET_JAR+"内の"+TEXT,str); } }else if(object==buttonImageJar){ Image img=getImageFromJar(targetJar,IMAGE); if(img!=null){ showImageFrame(TARGET_JAR+"内の"+IMAGE,new ImageIcon(img)); } }else if(object==buttonSoundMidJar){ AudioClip snd=getSoundFromJar(targetJar,SOUND_MID); if(snd!=null){ snd.play(); } }else if(object==buttonSoundWavJar){ AudioClip snd=getSoundFromJar(targetJar,SOUND_WAV); if(snd!=null){ snd.play(); } }else if(object==buttonSoundAuJar){ AudioClip snd=getSoundFromJar(targetJar,SOUND_AU); if(snd!=null){ snd.play(); } //ZIP }else if(object==buttonTextZip){ String str=getTextFromZip(targetZip,TEXT); if(str!=null){ showTextFrame(TARGET_ZIP+"内の"+TEXT,str); } }else if(object==buttonImageZip){ Image img=getImageFromZip(targetZip,IMAGE); if(img!=null){ showImageFrame(TARGET_ZIP+"内の"+IMAGE,new ImageIcon(img)); } }else if(object==buttonSoundMidJar){ AudioClip snd=getSoundFromZip(targetZip,SOUND_MID); if(snd!=null){ snd.play(); } }else if(object==buttonSoundWavZip){ AudioClip snd=getSoundFromZip(targetZip,SOUND_WAV); if(snd!=null){ snd.play(); } }else if(object==buttonSoundAuZip){ AudioClip snd=getSoundFromZip(targetZip,SOUND_AU); if(snd!=null){ snd.play(); } } } //------------------------------------------------------------------テキストファイル //内のテキストファイルを解凍せず、使える形で得る private String getTextFromJar(File targetFile,String textName){ try { JarFile jarFile = new JarFile(targetFile); //JarEntry jarEntry = new JarEntry(textName); JarEntry jarEntry = getTargetJarEntry(jarFile,textName); //その名前のEntryを探し出す if(jarEntry==null){ JOptionPane.showMessageDialog(this,textName+"が見つかりません","エラー",JOptionPane.ERROR_MESSAGE); return null; } //jar内のテキストファイルの入力ストリームを得る InputStream is=jarFile.getInputStream(jarEntry); //Stream(古い系統)からReader(新しい系統)へ変換する BufferedReader br=new BufferedReader(new InputStreamReader(is)); StringBuffer buf=new StringBuffer(); String line; while((line=br.readLine())!=null){ buf.append(line+"\n"); } br.close(); // return buf.toString(); } catch (IOException ex) { JOptionPane.showMessageDialog(this,ex.toString(),"エラー",JOptionPane.ERROR_MESSAGE); return null; } } private String getTextFromZip(File targetFile,String textName){ try { ZipFile zipFile = new ZipFile(targetFile); //ZipEntry zipEntry = new ZipEntry(textName); ZipEntry zipEntry = getTargetZipEntry(zipFile,textName); //その名前のEntryを探し出す if(zipEntry==null){ JOptionPane.showMessageDialog(this,textName+"が見つかりません","エラー",JOptionPane.ERROR_MESSAGE); return null; } //jar内のテキストファイルの入力ストリームを得る InputStream is=zipFile.getInputStream(zipEntry); //Stream(古い系統)からReader(新しい系統)へ変換する BufferedReader br=new BufferedReader(new InputStreamReader(is)); ArrayList stringArray=new ArrayList(); //StringBuffer buf=new StringBuffer(); String line; while((line=br.readLine())!=null){ stringArray.add(line); //buf.append(line+"\n"); } br.close(); // //return buf.toString(); StringBuffer ret=new StringBuffer(); for(int i=0;i