Java 创建临时路径而不创建文件
有没有办法在不创建临时文件的情况下创建临时文件路径 基本上,我需要一个方法Java 创建临时路径而不创建文件,java,file,path,temp,Java,File,Path,Temp,有没有办法在不创建临时文件的情况下创建临时文件路径 基本上,我需要一个方法Files.createTempFile(…)的等价物,而不创建文件 我可以将此变通方法用于我的目的: Path pathFile = null; pathFile = Files.createTempFile("tempFile",""); pathFile.toFile().delete(); 但我想用一种更干净的方式 这是否存在?我找不到它。支持createTempFile的
Files.createTempFile(…)
的等价物,而不创建文件
我可以将此变通方法用于我的目的:
Path pathFile = null;
pathFile = Files.createTempFile("tempFile","");
pathFile.toFile().delete();
但我想用一种更干净的方式
这是否存在?我找不到它。支持
createTempFile
的代码是类java.nio.file.TempFileHelper
,它是私有的,是一个实现细节,因此您不能依赖它。然而,阅读它是一个很好的源文件,可以了解它是如何工作的
此代码执行以下几项操作:
generatePath
生成一个随机名称路径
对象中传递 private static Path generatePath(String prefix, String suffix, Path dir) {
long n = random.nextLong();
String s = prefix + Long.toUnsignedString(n) + suffix;
Path name = dir.getFileSystem().getPath(s);
// the generated name should be a simple file name
if (name.getParent() != null)
throw new IllegalArgumentException("Invalid prefix or suffix");
return dir.resolve(name);
}
此外,如果没有明确指定要在哪个目录中创建文件,TempFileHelper的代码将使用tmpdir
的值:
private static final Path tmpdir =
Path.of(GetPropertyAction.privilegedGetProperty("java.io.tmpdir"));
我猜你的基本问题是“我能自己说吗?”。要完全回答您的问题:
java.io.tmpdir
和上面的代码。这只是TempFileHelper所做工作的一小部分
@FunctionalInterface
function OutputMaker {
public OutputStream make() throws IOException;
}
// and an implementation of this:
OutputMaker tempFileMaker = () -> {
Path p = Files.createTempFile("tempFile", "");
return Files.newOutputStream(p);
};
该接口可能必须看起来不同;您的问题没有解释您想用临时路径“做”什么。没有方法可以这样做的原因是,创建临时文件路径而不同时自动创建文件会创建一个可利用的竞争条件。而且“这里有一个不存在的文件名”很容易被利用。您真正得到的只是“这里有一个我检查时不存在的文件名,但现在可能存在,所以您不能依赖它不存在”。一个用例:AWS需要一个有效的路径,指向一个不存在的文件。@AdamMillerchip find。这是我第二次在AWS库中看到完全愚蠢的API设计。我猜这是很多API端点,因此有很多机会真的搞砸了:(