Java IO文件前缀字符串太短-但不是

Java IO文件前缀字符串太短-但不是,java,file,Java,File,正在尝试从一个目录创建simple.tar.gz文件。这是我的代码: File destinationFile = new File("/var/www/swOfflineFeeds/Companies/2/") File sourceFile = new File("/var/www/swOfflineFeeds/Companies/2/64cacf30-b294-49f4-b166-032a808d73cd/") println("destinationFile exists: " + de

正在尝试从一个目录创建simple.tar.gz文件。这是我的代码:

File destinationFile = new File("/var/www/swOfflineFeeds/Companies/2/")
File sourceFile = new File("/var/www/swOfflineFeeds/Companies/2/64cacf30-b294-49f4-b166-032a808d73cd/")
println("destinationFile exists: " + destinationFile.exists()) //prints true
println("sourceFile exists: " + sourceFile.exists()) //prints true

Archiver arch = ArchiverFactory.createArchiver(ArchiveFormat.TAR, CompressionType.GZIP)
File archiveFile = arch.create("64cacf30-b294-49f4-b166-032a808d73cd", destinationFile, sourceFile)
我收到错误信息:

| Error 2018-02-15 12:47:08,925 [http-bio-8183-exec-1] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /socialwall/test/index
Prefix string too short. Stacktrace follows:
Message: Prefix string too short
    Line | Method
->> 1978 | createTempFile in java.io.File
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     51 | create         in org.rauschig.jarchivelib.ArchiverCompressorDecorator
|     19 | index . . . .  in com.manas.socialwall.TestController$$EQjisHuy
|    198 | doFilter       in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter . . . in grails.plugin.cache.web.filter.AbstractFilter
|   1145 | runWorker      in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run            in java.lang.Thread
正如您所看到的,文件名是正确的。我在谷歌上搜索过,有人提到了JavaIO文件类中的bug。这是真的吗?如何避免此问题?

检查已使用的方法,我们看到创建方法如下所示:

public File create(String archive, File destination, File... sources) throws IOException {
     ...
     File temp = File.createTempFile(destination.getName(), archiver.getFilenameExtension(), destination);
前缀是第一个参数。如果您勾选了要执行的操作:

返回由该抽象路径名表示的文件或目录的名称。这只是路径名名称序列中的姓氏。如果路径名的名称序列为空,则返回空字符串

就你而言

File destinationFile = new File("/var/www/swOfflineFeeds/Companies/2/");
System.out.println(destinationFile.getName());
二,

收到的前缀太短,临时文件无法创建,它要求前缀至少为3个字符。看

前缀-用于生成文件名的前缀字符串;长度必须至少为三个字符

在您的情况下,似乎您只是提供了一个文件夹,而不是提供了文件名(至少有3个字符)



迈克尔所作。

和?你的代码有什么问题?请给我一张支票。编辑:你能添加完整的堆栈跟踪吗?对不起,我添加了错误消息。希望现在一切都清楚了。我注意到了,但有了完整的堆栈跟踪,我们可以看到临时文件的创建位置。添加了完整的堆栈跟踪这太愚蠢了,但非常感谢您的回答!我把名字编辑成“公司2”之类的works@Teemo,它应该在所使用的API中有更多的记录,而
文件
的要求没有记录在
创建
方法中。附言:别忘了检查当@Michael感谢你的帮助时该做什么。加入问题,并提供我对问题的意见。这应该很容易解决。