以下ã¯ã€Javaã§ã®è¦ä»¶ã«åŸºã¥ã„ãŸè§£ç”例ã§ã™ã€‚try-with-resources文を使用ã—ã¦ã€ZipInputStreamを使ã£ã¦ZIPファイルã®ã‚¨ãƒ³ãƒˆãƒªã‚’èªã¿å–りã€ã‚¨ãƒ©ãƒ¼å‡¦ç†ã‚‚å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ZipFileReader {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.println("ZIPファイルã®ãƒ‘スを入力ã—ã¦ãã ã•ã„:");
String zipFilePath = reader.readLine();
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) {
ZipEntry entry;
while ((entry = zipInputStream.getNextEntry()) != null) {
System.out.println("エントリå: " + entry.getName());
// エントリã®å†…容をコンソールã«è¡¨ç¤ºã™ã‚‹å‡¦ç†ã‚’追åŠ
}
} catch (FileNotFoundException e) {
System.err.println("指定ã•れãŸZIPファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。");
}
} catch (IOException e) {
System.err.println("入出力エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚");
}
}
}
BufferedReaderã¨InputStreamReaderを使用ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰ã®å…¥åŠ›ã‚’å—ã‘付ã‘ã¾ã™ã€‚- ユーザーãŒå…¥åŠ›ã—ãŸZIPファイルã®ãƒ‘スをå–å¾—ã—ã¾ã™ã€‚
ZipInputStreamã‚’try-with-resourcesæ–‡ã§ä½¿ç”¨ã—ã¦ZIPファイルを開ãã¾ã™ã€‚ZipEntryを使用ã—ã¦ZIPファイル内ã®ã‚¨ãƒ³ãƒˆãƒªã‚’èªã¿å–りã€å†…容をコンソールã«è¡¨ç¤ºã—ã¾ã™ã€‚FileNotFoundExceptionã‚’ã‚ャッãƒã—ã¦ã€æŒ‡å®šã•れãŸZIPファイルãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã«ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¾ã™ã€‚IOExceptionã‚’ã‚ャッãƒã—ã¦ã€å…¥å‡ºåŠ›ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã¾ã™ã€‚
ZipInputStream
ZipInputStreamã¯Javaã®java.util.zipパッケージã«å«ã¾ã‚Œã‚‹ã‚¯ãƒ©ã‚¹ã§ã€ZIPå½¢å¼ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–内ã®ã‚¨ãƒ³ãƒˆãƒªï¼ˆãƒ•ã‚¡ã‚¤ãƒ«ã‚„ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªï¼‰ã‚’é †ç•ªã«èªã¿è¾¼ã‚€ãŸã‚ã®ã‚¹ãƒˆãƒªãƒ¼ãƒ ã§ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã¯ã€ZipEntryオブジェクトã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã•れã€ZIPアーカイブ内ã®ã‚¨ãƒ³ãƒˆãƒªã‚’一ã¤ãšã¤å–り出ã—ã¦å‡¦ç†ã§ãã¾ã™ã€‚
以下ã«ã€ZipInputStreamã®ä¸»ãªæ©Ÿèƒ½ã¨ä½¿ã„æ–¹ã«ã¤ã„ã¦ã®è§£èª¬ã‚’示ã—ã¾ã™ã€‚
ä¸»ãªæ©Ÿèƒ½:
- ZIPアーカイブã®èªã¿è¾¼ã¿:
ZipInputStreamã¯ZIPアーカイブを開ãã€ãã®ä¸ã®ã‚¨ãƒ³ãƒˆãƒªã‚’逿¬¡çš„ã«èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ - エントリã®å–å¾—:
getNextEntryメソッドを使用ã—ã¦ã€æ¬¡ã®ZIPエントリをå–å¾—ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–内ã®ãƒ•ァイルやディレクトリã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚ - エントリã®å†…容ã®èªã¿è¾¼ã¿: エントリã®å†…容ã¯
ZipInputStreamã‹ã‚‰ç›´æŽ¥èªã¿å–ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã€ZIPアーカイブ内ã®å„ファイルã®ãƒ‡ãƒ¼ã‚¿ã‚’処ç†ã§ãã¾ã™ã€‚ - エントリã®ã‚¯ãƒãƒ¼ã‚º: å„エントリを処ç†ã—終ã‚ã£ãŸã‚‰ã€
closeEntryメソッドを呼ã³å‡ºã—ã¦ã‚¨ãƒ³ãƒˆãƒªã‚’クãƒãƒ¼ã‚ºã—ã¾ã™ã€‚
使用例:
以下ã¯ã€ZipInputStreamを使用ã—ã¦ZIPアーカイブ内ã®ã‚¨ãƒ³ãƒˆãƒªã‚’èªã¿è¾¼ã‚€åŸºæœ¬çš„ãªä¾‹ã§ã™ã€‚
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream("example.zip"))) {
ZipEntry entry;
while ((entry = zipInputStream.getNextEntry()) != null) {
System.out.println("エントリå: " + entry.getName());
// エントリã®å†…容をèªã¿è¾¼ã‚“ã§å‡¦ç†ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’追åŠ
// ...
zipInputStream.closeEntry(); // エントリをクãƒãƒ¼ã‚º
}
} catch (IOException e) {
e.printStackTrace();
}
ã“ã®ä¾‹ã§ã¯ã€ZIPアーカイブ内ã®å„エントリã®åå‰ã‚’表示ã—ã¦ã„ã¾ã™ã€‚エントリã®å†…容を処ç†ã™ã‚‹ãŸã‚ã«ã¯ã€é©åˆ‡ãªèªã¿å–り処ç†ã‚’行ã„ã¾ã™ã€‚ã¾ãŸã€closeEntryメソッドを呼ã³å‡ºã—ã¦ã‚¨ãƒ³ãƒˆãƒªã‚’クãƒãƒ¼ã‚ºã—ã¦ã„ã¾ã™ã€‚
ã¯ZIPアーカイブ内ã®ã‚¨ãƒ³ãƒˆãƒªã‚’逿¬¡çš„ã«èªã¿è¾¼ã‚€ãŸã‚ã®ä¾¿åˆ©ãªã‚¯ãƒ©ã‚¹ã§ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ã§ã€ZIPアーカイブ内ã®å„ファイルやディレクトリã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã€ãã®å†…容を処ç†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€Javaã®try-with-resourcesæ–‡ã¨çµ„ã¿åˆã‚ã›ã‚‹ã“ã¨ã§ã€ã‚¨ãƒ³ãƒˆãƒªã®å‡¦ç†ãŒçµ‚ã‚ã£ãŸéš›ã«ã¯è‡ªå‹•çš„ã«ã‚¯ãƒãƒ¼ã‚ºã•れるãŸã‚ã€ãƒªã‚½ãƒ¼ã‚¹ãƒªãƒ¼ã‚¯ã®å¿ƒé…ãŒã‚りã¾ã›ã‚“。
ZipInputStream
ZIPå½¢å¼ã¯åºƒã使用ã•れã¦ãŠã‚Šã€ZipInputStreamを使用ã™ã‚‹ã“ã¨ã§ZIPアーカイブ内ã®ãƒ‡ãƒ¼ã‚¿ã‚’柔軟ã«å–り扱ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ファイルã®åœ§ç¸®ã‚„è§£å‡ã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–内ã®ãƒ•ã‚¡ã‚¤ãƒ«æ§‹é€ ã®èª¿æŸ»ãªã©ã€æ§˜ã€…ãªã‚·ãƒŠãƒªã‚ªã§æ´»ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
リソース管ç†ã«ãŠã„ã¦ã¯ã€try-with-resources構文を活用ã™ã‚‹ã“ã¨ã§ã€ã‚¯ãƒãƒ¼ã‚ºæ¼ã‚Œã‚„例外ã®ç™ºç”Ÿã«ã‚ˆã‚‹ãƒªã‚½ãƒ¼ã‚¹ã®ä¸é©åˆ‡ãªåˆ©ç”¨ã‚’防ãã“ã¨ãŒã§ãã¾ã™ã€‚安全ã‹ã¤åŠ¹çŽ‡çš„ã«ZIPアーカイブを処ç†ã™ã‚‹ãŸã‚ã«ã€ZipInputStreamã‚’é©åˆ‡ã«æ´»ç”¨ã—ã¾ã—ょã†ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント