用java编程创建tar文件
我正在尝试使用Java的JTar将一个目录转换为tar文件,其中包括一个空的子目录和包含一些.json文件的子目录。包含文件的文件夹会自动包含在.tar文件中,但空文件夹不会包含在.tar文件中。我要创建包含所有子目录(空和带有data init)的.tar文件。 我的代码是这样的:用java编程创建tar文件,java,Java,我正在尝试使用Java的JTar将一个目录转换为tar文件,其中包括一个空的子目录和包含一些.json文件的子目录。包含文件的文件夹会自动包含在.tar文件中,但空文件夹不会包含在.tar文件中。我要创建包含所有子目录(空和带有data init)的.tar文件。 我的代码是这样的: try { File tarFile = new File("somefilename.tar"); TarOutputStream tos = ne
try
{
File tarFile = new File("somefilename.tar");
TarOutputStream tos = new TarOutputStream(new FileOutputStream(tarFile));
tartar("directoryname", tos);
tos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
private static void tartar(String dir, TarOutputStream tos)
{
File f = new File(dir);
String[] flist = f.list();
int buffersize = 1024;
byte[] buf = new byte[buffersize];
for (int i = 0; i < flist.length; i++)
{
File f2 = new File(f, flist[i]);
if (f2.isDirectory())
{
tartar(f2.getPath(), tos);
continue;
}
try
{
FileInputStream fis = new FileInputStream(f2);
// TarEntry te = new TarEntry(f2.getPath());
TarEntry te = new TarEntry(f2, f2.getPath());
tos.putNextEntry(te);
int count = 0;
while ((count = fis.read(buf, 0, buffersize)) != -1)
{
tos.write(buf, 0, count);
}
// tos.closeEntry();
// tos.close();
fis.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
试试看
{
File tarFile=新文件(“somefilename.tar”);
TarOutputStream tos=新的TarOutputStream(新文件输出流(tarFile));
塔塔(“目录名”,tos);
tos.close();
}
捕获(例外e)
{
e、 printStackTrace();
}
私有静态void tartart(字符串dir、TarOutputStream tos)
{
文件f=新文件(dir);
字符串[]flist=f.list();
int buffersize=1024;
字节[]buf=新字节[buffersize];
for(int i=0;i
虽然我没有在Java中调用tarball,但在Linux中,您可以使用运行时、进程和ProcessBuilder API运行命令“tar-cvzf file_name.tar.gz directory_name/”。@Huke,我想以编程方式创建.tar文件夹,通过上面发布的代码,我可以创建.tar文件,但问题是它跳过了空目录。嗯,我明白了,因为空目录不会有文件,所以String[]flist=f.list()代码>将返回空数组。在它之后,你们将无法进入循环内部。所以,检查数组长度。如果是空的,则只需在TAR中创建该目录项,如果不是空的,则循环遍历每个文件并创建条目;给出当前子目录及其工作状态的列表。