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

严重: 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.TarBufferbuffer 
           
static intLONGFILE_ERROR 
          Fail if a long file name is required in the archive.
static intLONGFILE_GNU 
          GNU tar extensions are used to store long file names in the archive. 
static intLONGFILE_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.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值