[java] 파일 압축 및 압축 해제 오류 처리하기
파일을 압축하거나 압축 해제할 때 오류가 발생할 수 있습니다. 이러한 오류를 효과적으로 처리하는 방법을 알아보겠습니다.
1. 파일 압축 오류 처리하기
파일을 압축하는 과정에서 발생할 수 있는 오류를 처리하기 위해서는 예외 처리를 해야합니다. 가장 일반적인 오류는 파일을 찾을 수 없거나 액세스 권한이 없는 경우입니다. 이럴 경우 ZipException
과 IOException
을 처리해주어야 합니다.
아래는 파일을 압축하는 예제 코드입니다.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FileCompressor {
public void compressFile(String sourcePath, String destinationPath) {
try {
FileOutputStream fos = new FileOutputStream(destinationPath);
ZipOutputStream zipOut = new ZipOutputStream(fos);
File fileToCompress = new File(sourcePath);
FileInputStream fis = new FileInputStream(fileToCompress);
ZipEntry zipEntry = new ZipEntry(fileToCompress.getName());
zipOut.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
fis.close();
zipOut.close();
fos.close();
System.out.println("파일이 압축되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
FileCompressor compressor = new FileCompressor();
compressor.compressFile("path/to/source/file.txt", "path/to/destination/archive.zip");
}
}
2. 파일 압축 해제 오류 처리하기
파일을 압축 해제하는 과정에서 발생할 수 있는 오류를 처리하기 위해서는 역시 예외 처리를 해주어야 합니다. 일반적인 오류는 압축 파일이 손상된 경우입니다. ZipException
과 IOException
을 처리해줄 수 있습니다.
아래는 파일을 압축 해제하는 예제 코드입니다.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class FileDecompressor {
public void decompressFile(String sourcePath, String destinationPath) {
try {
FileInputStream fis = new FileInputStream(sourcePath);
ZipInputStream zipIn = new ZipInputStream(fis);
File destinationDirectory = new File(destinationPath);
if (!destinationDirectory.exists()) {
destinationDirectory.mkdirs();
}
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
String filePath = destinationDirectory.getAbsolutePath() + File.separator + entry.getName();
if (!entry.isDirectory()) {
extractFile(zipIn, filePath);
} else {
File dir = new File(filePath);
dir.mkdirs();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
fis.close();
System.out.println("파일이 압축 해제되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
}
private void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
FileOutputStream fos = new FileOutputStream(filePath);
byte[] bytes = new byte[1024];
int length;
while ((length = zipIn.read(bytes)) >= 0) {
fos.write(bytes, 0, length);
}
fos.close();
}
public static void main(String[] args) {
FileDecompressor decompressor = new FileDecompressor();
decompressor.decompressFile("path/to/source/archive.zip", "path/to/destination/folder");
}
}
위 코드에서는 압축 해제할 파일의 경로와 압축을 해제한 파일이 저장될 경로를 인자로 전달합니다.