java.io.IOException:没有更多文件 - (将 pdf 复制到另一个位置时)

问题描述 投票:0回答:3

我继承了这段代码,其中包含一个函数,该函数将 .pdf 文件从一个位置复制到另一个位置,在此过程中创建新文件夹(由哈希值命名),并将新路径保存到数据库,供 BI 工具稍后用来访问通过 API 获取文件。

将文件服务器移动到新主机并四重检查权限和路径引用后,在代码中将文件复制到新位置时,我们收到此 java.io.io 异常。复制失败,未在适用的情况下创建文件夹,并且无法通过 API 访问文件。

日志文件显示程序正确识别源文件,并正确构建目标路径。

关于导致此 IO 异常的原因有什么想法吗?以前没有遇到过这个,而且我似乎无法在互联网上的任何地方找到相关的线程。

功能:

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;

public boolean pushFile(File file, String newFileName)
{
    File newFile = new File(SAN_LOCATION + "\\" + newFileName.subSequence(0, 2) + "\\" + newFileName);

    try
    {

        System.out.print("Copying " + file.getName() + " to: " + newFile.getAbsolutePath());
        FileUtils.copyFile(file, newFile);
        System.out.println(" - Good file transfer");

    } catch (IOException ex)
    {
        System.out.println(" - Bad file transfer");
        Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, null, ex);
        return false;
    }
    return true;
}

日志片段:

Copying ARC FERM 2019-06-18 07-35-58_AM0000006.pdf to: \\tf-fs-1\arcstor\fc\fc3533e07547850176b671730ddccfcc - Bad file transfer
java : Jun 18, 2019 11:01:27 AM datatosql.PushToSQL pushFile
At C:\arc\ch_agilent_hplc.ps1:2 char:1
+ java -jar ".\Agilent.jar" CH HPLC "$file" 2>&1 | Out-File C:\arc\Logs\Agilent\ch ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Jun 18, 2019 11...hToSQL pushFile:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

SEVERE: null
java.io.IOException: There are no more files
    at java.io.WinNTFileSystem.canonicalize0(Native Method)
    at java.io.WinNTFileSystem.canonicalize(Unknown Source)
    at java.io.File.getCanonicalPath(Unknown Source)
    at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:1076)
    at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:1040)
    at datatosql.PushToSQL.pushFile(PushToSQL.java:763)
    at datatosql.PushToSQL.push(PushToSQL.java:508)
    at agilent.Agilent.main(Agilent.java:503)
    enter code here
java java-io ioexception
3个回答
1
投票

谷歌搜索“没有更多文件”可以找到安全软件(尤其是华硕数据安全管理器)出现问题的人。所以我怀疑问题不在你的Java代码中。您可以通过手动复制文件来证明这一点,如下所示:

copy some.file "\\tf-fs-1\arcstor\fc\fc3533e07547850176b671730ddccfcc"

我从您的错误消息中获取了路径,但请检查它是否正确!我认为你需要路径周围的引号。我的猜测是这不起作用,因为它被远程计算机上的某些东西阻止了。


0
投票

我也遇到了类似的问题。就我而言,我循环使用

FileUtils.copyFile(file, newFile)
。成功复制 258 次后,我会收到该错误。我更改了代码以使用
Files.copy(sourcePath, destPath)
代替,问题就消失了。


0
投票

我们在使用 Talend Open Studio 设计的 java 编译 ETL 作业时遇到了同样的问题。一项作业会复制 1..n 个文件,然后突然因致命错误而失败。我没有确定根本原因,但我实现了一个 try-catch,它会在出现此类问题时重新尝试保存文件,并且重试总是成功保存文件。所以不知道为什么会发生这种情况,但它看起来是随机的,并且似乎不依赖于文件本身甚至目标目录。

© www.soinside.com 2019 - 2024. All rights reserved.