Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么部署后`renameTo`返回false?_Java - Fatal编程技术网

Java 为什么部署后`renameTo`返回false?

Java 为什么部署后`renameTo`返回false?,java,Java,调用renameTo返回false。在我的本地机器上,它可以工作,但当我在JBoss服务器上部署时,它失败了。我检查了所有路径 public boolean MoveCSVFile(String sFileName) { String dtFile = ""; java.util.Date dt = new java.util.Date(); SimpleDateFormat sdfd = new SimpleDateFormat("yyyyMMddhhmmss");

调用
renameTo
返回false。在我的本地机器上,它可以工作,但当我在JBoss服务器上部署时,它失败了。我检查了所有路径

public boolean MoveCSVFile(String sFileName) {
    String dtFile = "";
    java.util.Date dt = new java.util.Date();
    SimpleDateFormat sdfd = new SimpleDateFormat("yyyyMMddhhmmss");

    try {
        File afile = new File(this.sInputPath + File.separator + sFileName);
        dtFile = System.getProperty("user.dir") + File.separator+"FilesUploaded" + File.separator+this.sSectionName;
        File destination = new File(dtFile);
        if(!destination.exists()) {
            destination.mkdirs();
        }

        dtFile = dtFile + File.separator + sdfd.format(dt) + afile.getName();
        File bfile = new File(dtFile);
        if(afile.renameTo(bfile)) {
            System.out.println("CSV moved...");
        } 
        else {
            System.out.println("CSV not moved...");
        }
    } 
    catch(Exception e) {
        return false;
    }
    return true;
}

文件。move
更合适,尽管它也可能失败。 最简单的解决方案是,用户权限;web服务器应用程序也可能有一个安全管理器。抛出的异常将澄清原因

在日期格式中,使用了
hh
,即12小时格式,
hh
24小时

public void moveCSVFile(String sFileName) throws IOException {
    java.util.Date dt = new java.util.Date();
    SimpleDateFormat sdfd = new SimpleDateFormat("yyyyMMddHHmmss");

    Path afile = Paths.get(this.sInputPath, sFileName);
    Path bFile = Paths.get(System.getProperty("user.dir"),
            "FilesUploaded", this.sSectionName,
            sdfd.format(dt) + aFile.getFileName());
    Files.createDirectories(bFile.getParent());
    Files.move(aFile, bFile); //, StandardCopyOption.REPLACE_EXISTING);
}

另外,让调用方捕获任何IOException并进行处理。

1)检查目录的权限。2) 抛出异常或记录异常,以便在出现异常时了解情况。这是过时的和缺乏信息的。切换到使用
路径
路径
文件
,您将得到相应的
异常
。您应该显示或记录异常,而不是像
renameTo
(返回boolean-bad)那样犯同样的错误。您通常不应该
catch(异常e)
(口袋妖怪,必须捕获所有的异常?),而应该只捕获声明为有时抛出的异常。永远不要忽略例外,他们提供的信息很有价值,它可以告诉你什么是错误的。1.我已经授予了所有权限2.它返回false,没有异常,例如3.whcih包是Path,Files是,我使用的是java1.61。我使用的是java1.6,所以我猜不能使用Files类2.没有异常,别忘了,它只是回来了。尝试编写自己的文件副本。有时重命名在不同磁盘之间可能不起作用。看见可能Apache库也有一些东西。我在目标路径中复制了我的文件,并尝试删除源文件,但没有被删除。我正在使用多线程,但我不认为这是因为没有使用任何流。