[ Pobierz całość w formacie PDF ]
chooser.setCurrentDirectory(new File("."));
int r = chooser.showOpenDialog(ZipTestFrame.this);
if (r == JFileChooser.APPROVE_OPTION)
{
zipname = chooser.getSelectedFile().getPath();
fileCombo.removeAllItems();
scanZipFile();
}
}
});
JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
menuBar.add(menu);
setJMenuBar(menuBar);
// dodaje obszar tekstowy i list
fileText = new JTextArea();
fileCombo = new JComboBox();
fileCombo.addActionListener(new ActionListener()
52 Java. Techniki zaawansowane
{
public void actionPerformed(ActionEvent event)
{
loadZipFile((String) fileCombo.getSelectedItem());
}
});
add(fileCombo, BorderLayout.SOUTH);
add(new JScrollPane(fileText), BorderLayout.CENTER);
}
/**
* Skanuje zawarto archiwum ZIP i wype nia list .
*/
public void scanZipFile()
{
new SwingWorker()
{
protected Void doInBackground() throws Exception
{
ZipInputStream zin = new ZipInputStream(new
FileInputStream(zipname));
ZipEntry entry;
while ((entry = zin.getNextEntry()) != null)
{
publish(entry.getName());
zin.closeEntry();
}
zin.close();
return null;
}
protected void process(List names)
{
for (String name : names)
fileCombo.addItem(name);
}
}.execute();
}
/**
* aduje zawarto pliku z archiwum ZIP
* do obszaru tekstowego
* @param name nazwa pliku w archiwum
*/
public void loadZipFile(final String name)
{
fileCombo.setEnabled(false);
fileText.setText("");
new SwingWorker()
{
protected Void doInBackground() throws Exception
{
try
{
Rozdzia 1. Strumienie i pliki 53
ZipInputStream zin = new ZipInputStream(new
FileInputStream(zipname));
ZipEntry entry;
// znajduje element archiwum o odpowiedniej nazwie
while ((entry = zin.getNextEntry()) != null)
{
if (entry.getName().equals(name))
{
// wczytuje go do obszaru tekstowego
Scanner in = new Scanner(zin);
while (in.hasNextLine())
{
fileText.append(in.nextLine());
fileText.append("\n");
}
}
zin.closeEntry();
}
zin.close();
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
protected void done()
{
fileCombo.setEnabled(true);
}
}.execute();
}
public static final int DEFAULT_WIDTH = 400;
public static final int DEFAULT_HEIGHT = 300;
private JComboBox fileCombo;
private JTextArea fileText;
private String zipname;
}
java.util.zip.ZipInputStream 1.1
ZipInputStream(InputStream in)
tworzy obiekt typu ZipInputStream umo liwiaj cy dekompresj danych z podanego
strumienia InputStream.
ZipEntry getNextEntry()
zwraca obiekt typu ZipEntry opisuj cy nast pn pozycj archiwum lub null, je eli
archiwum nie ma wi cej pozycji.
54 Java. Techniki zaawansowane
void closeEntry()
zamyka aktualnie otwart pozycj archiwum ZIP. Dzi ki temu mo emy odczyta
nast pn pozycj , wywo uj c metod getNextEntry().
java.util.zip.ZipOutputStream 1.1
ZipOutputStream(OutputStream out)
tworzy obiekt typu ZipOutputStream, który umo liwia kompresj i zapis danych
w podanym strumieniu OutputStream.
void putNextEntry(ZipEntry ze)
zapisuje informacje podanej pozycji ZipEntry do strumienia i przygotowuje strumie
do odbioru danych. Dane mog zosta zapisane w strumieniu przy u yciu metody
write().
void closeEntry()
zamyka aktualnie otwart pozycj archiwum ZIP. Aby otworzy nast pn pozycj ,
wywo ujemy metod putNextEntry.
void setLevel(int level)
okre la domy lny stopie kompresji nast pnych pozycji archiwum o trybie DEFLATED.
Domy ln warto ci jest Deflater.DEFAULT_COMPRESSION. Wyrzuca wyj tek
IllegalArgumentException, je eli podany stopie jest nieprawid owy.
Parametry: level stopie kompresji, od 0 (NO_COMPRESSION)
do 9 (BEST_COMPRESSION).
void setMethod(int method)
okre la domy ln metod kompresji dla danego ZipOutputStream dla wszystkich
pozycji archiwum, dla których metoda kompresji nie zosta a okre lona.
Parametry: method metoda kompresji, DEFLATED lub STORED.
java.util.zip.ZipEntry 1.1
ZipEntry(String name)
Parametry: name nazwa elementu.
long getCrc()
zwraca warto sumy kontrolnej CRC32 danego elementu.
String getName()
zwraca nazw elementu.
long getSize()
zwraca rozmiar danego elementu po dekompresji lub 1, je eli rozmiar nie jest
znany.
boolean isDirectory()
zwraca warto logiczn , która okre la, czy dany element archiwum jest katalogiem.
Rozdzia 1. Strumienie i pliki 55
void setMethod(int method)
Parametry: method metoda kompresji danego elementu, DEFLATED
lub STORED.
void setSize(long rozmiar)
okre la rozmiar elementu. Wymagana, je eli metod kompresji jest STORED.
Parametry: rozmiar rozmiar nieskompresowanego elementu.
void setCrc(long crc)
okre la sum kontroln CRC32 dla danego elementu. Aby obliczy t sum
u ywamy klasy CRC32. Wymagana, je eli metod kompresji jest STORED.
Parametry: crc suma kontrolna elementu.
java.util.ZipFile 1.1
ZipFile(String name)
ten konstruktor tworzy obiekt typu ZipFile, otwarty do odczytu, na podstawie
podanego a cucha.
ZipFile(File file)
tworzy obiekt typu ZipFile, otwarty do odczytu, na podstawie podanego a cucha
lub obiektu typu File.
Enumeration entries()
zwraca obiekt typu Enumeration, wyliczaj cy obiekty ZipEntry opisuj ce elementy
archiwum ZipFile.
ZipEntry getEntry(String name)
zwraca element archiwum o podanej nazwie lub null, je eli taki element nie istnieje.
Parametry: name nazwa elementu.
InputStream getInputStream(ZipEntry ze)
zwraca obiekt InputStream dla podanego elementu.
Parametry: ze element ZipEntry w pliku ZIP.
String getName() zwraca cie k dost pu do pliku ZIP.
Strumienie obiektów i serializacja
Korzystanie z rekordów o sta ej d ugo ci jest dobrym rozwi zaniem, pod warunkiem e zapi-
sujemy dane tego samego typu. Jednak obiekty, które tworzymy w programie zorientowanym
obiektowo, rzadko nale do tego samego typu. Dla przyk adu: mo emy u ywa tablicy o nazwie
staff, której nominalnym typem jest Employee, ale która zawiera obiekty b d ce instancjami
klas pochodnych, np. klasy Manager.
56 Java. Techniki zaawansowane
[ Pobierz całość w formacie PDF ]
© 2009 Nie chcę już więcej kochać, cierpieć, czekać ani wierzyć w rzeczy, których nie potwierdza życie. - Ceske - Sjezdovky .cz. Design downloaded from free website templates