java.lang.RuntimeException: file name is is too long ( > 100 bytes) 异常

本文介绍了解决在使用Apache Commons Compress进行Tar归档时遇到的长文件名问题的方法。通过设置TarOutputStream的LongFileMode为LONGFILE_GNU,可以启用GNU扩展来存储超过100字符的长文件名。
摘要由CSDN通过智能技术生成
严重: Servlet.service() for servlet action threw exception
java.lang.RuntimeException: file name '....' is too long ( > 100 bytes)

at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.putArchiveEntry(TarArchiveOutputStream.java:187)

解决方式,查看commons-compress-1.3/apidocs/index.html,搜索

TarArchiveOutputStream

即可看到
Field Summary
protected org.apache.commons.compress.archivers.tar.TarBuffer buffer
staticint LONGFILE_ERROR
Fail if a long file name is required in the archive.
staticint LONGFILE_GNU
GNU tar extensions are used to store long file names in the archive.
staticint LONGFILE_TRUNCATE
Long paths will be truncated in the archive.
中间红色加粗的部分就是解决此问题的方式。


也可参考如下地址

http://www.coderanch.com/t/326804/java/java/make-Tar-java

Jim Yingst
Wanderer
Sheriff

Joined: Jan 30, 2000
Posts: 18641
Some versions of tar do not support names (paths, really) longer than 100 chars. If you've got paths longer than that, you won't be able to use a version that doesn't allow lengths > 100 chars. Fortunately there seem to be other choices. I don't see a way to use com.ice.tar for this. But it looks like org.apache.tools.tar will work. Try this:
  1. tos.setLongFileMode(TarOutputStream.LONGFILE_GNU);

Note also that you may want to put in some logic to modify the names a bit when you create entries. If you're tarring up everything from c:\csharpzip (as the base directory) you probably don't want to include the c:\csharpzip in the name. Because when someone untars the files, they will probably be on another machine with a different root directory. Insead you want a relative path name. Which means replacing

c:\csharpzip\SharpZipLibSample\samples\DIME\DimeDataSetServiceConsumer\DimeDataSetServiceConsumer.csproj

with

SharpZipLibSample\samples\DIME\DimeDataSetServiceConsumer\DimeDataSetServiceConsumer.csproj

[now i use listFiles what you suggested(and recommended), is this implementation true, i mean the code.

It looks correct, yes. I haven't tested it carefully though - you'll have to do that.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值