Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java编程创建tar文件_Java - Fatal编程技术网

用java编程创建tar文件

用java编程创建tar文件,java,Java,我正在尝试使用Java的JTar将一个目录转换为tar文件,其中包括一个空的子目录和包含一些.json文件的子目录。包含文件的文件夹会自动包含在.tar文件中,但空文件夹不会包含在.tar文件中。我要创建包含所有子目录(空和带有data init)的.tar文件。 我的代码是这样的: try { File tarFile = new File("somefilename.tar"); TarOutputStream tos = ne

我正在尝试使用Java的JTar将一个目录转换为tar文件,其中包括一个空的子目录和包含一些.json文件的子目录。包含文件的文件夹会自动包含在.tar文件中,但空文件夹不会包含在.tar文件中。我要创建包含所有子目录(空和带有data init)的.tar文件。 我的代码是这样的:

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中创建该目录项,如果不是空的,则循环遍历每个文件并创建条目;给出当前子目录及其工作状态的列表。