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.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:
view plain copy to clipboard print ?
  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.

你可能感兴趣的:(java.lang.RuntimeException: file name is is too long ( > 100 bytes) 异常)