首页 > 解决方案 > 动态生成文件路径时不删除文件

问题描述

我面临一个问题,但还没有解决它。让我分享一下我到目前为止所做的事情。我尝试使用java.nio.file包删除文件。下面是我的代码。

// directory will be dynamically generated.
String directory = fileDirectory+ "//" + fileName;
Path path = Paths.get(directory);
if (Files.exists(path)) {
    Files.delete(path);
}

我正确生成了路径。但是当Files.exists(path)调用它时return false。这就是文件没有被删除的原因。但是,如果我directory string通过硬编码生成它,它就可以完美地工作。

// hard-coded directory works perfectly.
String directory = "C://opt//tomcat//webapps//resources//images//sprite.jpg";

我还尝试了另一种方法Files.deleteIfExists(path);。检查文件是否存在并删除文件。

其他的包org.apache.commons.io.FileUtilsjava.io.File试过了。但无法解决问题。

注意:我的应用程序在spring-boot. 我从application.properties文件中读取了保存图像和删除图像的目录。

编辑:

文件上传我的意思是保存到目录中是完美的。但是文件删除不起作用。

application.properties

image.root.dir=images
image.root.save.dir=C:/opt/tomcat/webapps/resources/

在实现文件中

@Value("${image.root.dir}")
private String UPLOADED_FOLDER;

@Value("${image.root.save.dir}")
private String saveDir;

String directory = saveDir + UPLOADED_FOLDER + "/" + fileName;

将文件保存到目录

String directory = saveDir + UPLOADED_FOLDER + "/";
try {
    byte[] bytes = file.getBytes();
    Path path = Paths.get(directory);
    if (!Files.exists(path)) {
        Files.createDirectories(path);
    }
    path = Paths.get(directory, file.getOriginalFilename());
    Files.write(path, bytes);
} catch (IOException e) {
        logger.error("save image into directory : " + e);
}

标签: javafilespring-boot

解决方案


String directory = fileDirectory+ "//" + fileName;

这不是在目录和文件名之间使用的正确分隔符,尽管它似乎也可以。

这意味着问题不在于分隔符,而在于用于生成路径的代码与此代码之间的不匹配。您正在将目录生成到其他地方而不是指向的地方。


推荐阅读