電子書籍の厳選無料作品が豊富!

javaでテキストを圧縮しているのですが、圧縮後のファイルを新たに別のファイルに保存させたい場合はどのような手順を踏めばいいのでしょうか?

public class zip{
public static void main(String[] args){
      File file =new File("c:\\new\\files");
File files[] =file.listFiles();

for (int p = 0; p < files.length; p++) {
zip(files[p].getPath(),files[p].getPath() +".zip" );
}
}
private static void zip(String inFile,String outFile){
byte[] buf = new byte[1024];//*
int len;
try(
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(outFile)));
FileInputStream fi = new FileInputStream(inFile);
){
zos.putNextEntry(new ZipEntry(inFile));
len = fi.read(buf);
zos.write(buf, 0, len);
}catch(Exception e){
}

このままだと"c:\\new\\files"ここに保存されてしまうので
新たに”C:\new\新しいフォルダー”ここに保存するにはどうすればいいですか?
コードが置いてある場所、テキストが置いてある場所、zipを置く場所の3つがある感じです。
それと1024バイト以上のファイルを対象にする場合は*この部分を変えるのですか?

A 回答 (1件)

//各種インポート


import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;


public class zip{
public static void main(String[] args){
File file =new File("C:\\new\\files");



File files[] =file.listFiles();

for (int p = 0; p < files.length; p++) {

//変更部分
String str=files[p].getPath();
String regex = "C:\\\\new\\\\files";//このパス部分を
Pattern p1 = Pattern.compile(regex);

Matcher m = p1.matcher(str);
String result = m.replaceFirst("C:\\\\new\\\\新しいフォルダー");//このパス部分に変換している



zip(files[p].getPath(),result+".zip" );
//変更部分終了

}

}


private static void zip(String inFile,String outFile){
byte[] buf = new byte[1024];//*
int len;
try(
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(outFile)));
FileInputStream fi = new FileInputStream(inFile);
){
zos.putNextEntry(new ZipEntry(inFile));
len = fi.read(buf);
zos.write(buf, 0, len);
}catch(Exception e){
}


}

}


files[p]に入ったフォルダ内のファイルのパス内のC:\\new\\filesの文字列の部分を
C:\\new\\新しいフォルダー
に置き換えています これで圧縮ファイルはC:\\new\\新しいフォルダー のフォルダ内に作られます
//*部分の数値を上げるとサイズがさらに大きいファイルを圧縮できました
数値を上げすぎると動作が重くなりました
    • good
    • 0
この回答へのお礼

ファイルパスを新たなパスに書き換えるという認識ですね。
ありがとうございました

お礼日時:2016/10/25 12:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!