|
What this is
Other links
The source code/* * 23:19:41 02/08/00 * * ZipExplorer.java - Allows to open files from zips * Copyright (C) 2000 Romain Guy * romain.guy@jext.org * www.jext.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.jext.misc; import java.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.util.zip.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.text.BadLocationException; import org.jext.*; import org.jext.gui.*; public class ZipExplorer extends JDialog implements ActionListener { // private members private JextFrame parent; private String zipName; private JTable zipTable; private ZipFile zipFile; private JextHighlightButton open, cancel; private JextTextArea textArea; private ZipTableModel zipModel; private Enumeration zipEntries; public ZipExplorer(JextFrame parent, JextTextArea textArea, String zipName) { super(parent, Jext.getProperty("zip.explorer.title"), true); this.parent = parent; this.textArea = textArea; readZip(zipName); this.zipName = zipName; getContentPane().setLayout(new BorderLayout()); JPanel btnPane = new JPanel(); btnPane.add((open = new JextHighlightButton(Jext.getProperty("general.open.button")))); open.setToolTipText(Jext.getProperty("general.open.tip")); open.setMnemonic(Jext.getProperty("general.open.mnemonic").charAt(0)); open.addActionListener(this); getRootPane().setDefaultButton(open); btnPane.add((cancel = new JextHighlightButton(Jext.getProperty("general.cancel.button")))); cancel.setMnemonic(Jext.getProperty("general.cancel.mnemonic").charAt(0)); cancel.addActionListener(this); getContentPane().add(BorderLayout.CENTER, createZipTableScroller()); getContentPane().add(BorderLayout.SOUTH, btnPane); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addKeyListener(new AbstractDisposer(this)); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { cancel(); } }); pack(); Utilities.centerComponentChild(parent, this); setVisible(true); } private JScrollPane createZipTableScroller() { zipTable = new JTable(new ZipTableModel()); zipTable.getTableHeader().setReorderingAllowed(false); zipTable.getColumnModel().getColumn(1).setCellRenderer(new DisabledCellRenderer()); JScrollPane scroller = new JScrollPane(zipTable); scroller.getViewport().setPreferredSize(new Dimension(300, 200)); return scroller; } private void readZip(String zipName) { if (zipName == null) return; try { File zipped = new File(zipName); if (!zipped.exists()) { Utilities.showError(Jext.getProperty("textarea.file.notexists")); return; } zipFile = new ZipFile(zipped); zipEntries = zipFile.entries(); } catch (ZipException ze) { } catch (IOException ioe) { } } private boolean readZipContent(String fileChosen) { if (zipFile == null || fileChosen == null) return false; try { ZipEntry entry = zipFile.getEntry(fileChosen); if (entry == null) return false; textArea.open(fileChosen, new InputStreamReader(zipFile.getInputStream(entry)), (int) entry.getSize()); parent.resetStatus(textArea); } catch (IOException ioe) { String[] args = { fileChosen }; Utilities.showError(Jext.getProperty("zip.file.corrupted", args)); return false; } return true; } public void actionPerformed(ActionEvent evt) { Object o = evt.getSource(); if (o == open) { int zipIndex[] = zipTable.getSelectedRows(); for(int i = 0; i < zipTable.getSelectedRowCount(); i++) { String file = (String) zipTable.getValueAt(zipIndex[i], 0); String path = (String) zipTable.getValueAt(zipIndex[i], 1); if(file.endsWith(".jar") || file.endsWith(".zip")) { Utilities.showError(Jext.getProperty("zip.file.corrupted")); return; } // use the passed textArea, or else there would be a ghost textArea if(i != 0) textArea = parent.createFile(); if (!path.equals("/")) file = path + "/" + file; if(!readZipContent(file)) { cancel(); return; } } parent.saveRecent(zipName); cancel(); } else if (o == cancel) cancel(); } private void cancel() { try { zipFile.close(); } catch (IOException ioe) { } dispose(); } class ZipTableModel extends AbstractTableModel { private ArrayList zipContents; ZipTableModel() { zipContents = new ArrayList(); for ( ; zipEntries.hasMoreElements(); ) { ZipEntry name = (ZipEntry) zipEntries.nextElement(); if (name == null) continue; if (!name.isDirectory()) addZipEntry(name); } } public int getColumnCount() { return 2; } public int getRowCount() { return zipContents.size(); } public Object getValueAt(int row, int col) { String fileName, path; ZipEntry file = (ZipEntry) zipContents.get(row); String name = file.getName(); int index = name.lastIndexOf('/'); if (index == -1) { fileName = name; path = "/"; } else { fileName = name.substring(index + 1); path = name.substring(0, index); } switch(col) { case 0: return fileName; case 1: return path; default: return null; } } public boolean isCellEditable(int row, int col) { return false; } public String getColumnName(int index) { switch(index) { case 0: return Jext.getProperty("zip.explorer.filenames"); case 1: return Jext.getProperty("zip.explorer.directories"); default: return null; } } private void addZipEntry(ZipEntry file) { for (int i = 0; i < zipContents.size(); i++) { ZipEntry z = (ZipEntry) zipContents.get(i); if (z.getName().compareTo(file.getName()) >= 0) { zipContents.add(i, file); return; } } zipContents.add(file); } } } // End of ZipExplorer.java |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.