只是好奇什么时候System.getProperty("java.io.tmpdir")回来"c:\temp".根据java.io.File Java Docs -
缺省临时文件目录由系统属性java.io.tmpdir指定.在UNIX系统上,此属性的默认值通常为"/ tmp"或"/ var/tmp"; 在Microsoft Windows系统上,它通常是"c:\ temp".调用Java虚拟机时,可以为此系统属性提供不同的值,但不保证对此属性的编程更改会对此方法使用的临时目录产生任何影响.
但就我而言 -
System.out.println(System.getProperty("java.io.tmpdir"));
Run Code Online (Sandbox Code Playgroud)
永远返回 -
C:\Users\admin\AppData\Local\Temp\ i.e. %TEMP%
Run Code Online (Sandbox Code Playgroud)
它会在什么条件下返回"c:\temp"?
编辑:如果我将%TEMP%更改为C:\ Temp然后我会得到C:\ Temp,对吧?但文档显示c:\ Temp而不是C:\ Temp.
我在Windows上使用R并需要更改存储tmp文件的临时目录.
我在R-help等处查了几个答案,但是没有人在工作.
在尝试了这些答案之后(我不得不说我没有完全明白它们),
tempdir()仍然是默认的,就像我尝试不同的方式一样.
任何人都可以提供一个如何做到这一点的详细示例程序吗?
我的会议信息:
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_2.15.2
Run Code Online (Sandbox Code Playgroud) 我有一个脚本来检查包含许多匹配的PDF +文本文件的zipfile.我想解压缩,或者以某种方式从zipfile中读取文本文件,然后从文本文件中挑选一些信息,看看文件版本是否正确.
我正在寻找一个tempnam()函数来找到一个等价来制作一个tempdir,但也许有人有更好的解决方案来解决这个问题.
indexfile看起来像这样.(->适用于TAB char).我已经完成了从文本文件中提取版本的功能,并检查它是否已正确,它只是解包,tmpdir或其他一些我正在寻找的解决方案.
1000->filename->file version->program version->customer no->company no->distribution
2000->pagenumber->more info->more info->...
Run Code Online (Sandbox Code Playgroud) 我需要一个临时目录,但我想完全控制它的创建和删除.
我将使用此目录来放置我想要监视新提交的git存储库,因此我需要将它们永久存储在某处.
因此我想避免/tmpdir,因为它可以被用户清除(?).这是什么最好的做法?
我想通过plink 创建自己的变体makePSOCKcluster并newPSOCKnode使用ssh连接.所以,我重写了代码
if (machine != "localhost") {
rshcmd <- getClusterOption("rshcmd", options)
user <- getClusterOption("user", options)
cmd <- shQuote(cmd)
cmd <- paste(rshcmd, "-l", user, machine, cmd)
}
if (.Platform$OS.type == "windows") {
system(cmd, wait = FALSE, input = "")
}
else system(cmd, wait = FALSE)
Run Code Online (Sandbox Code Playgroud)
通过我的变体,这给了我cmd这样的:
plink -ssh Rebelion@ClusterNode1 -pw myPasswd123 "Rscript --default-packages=datasets,utils,grDevices,stats,graphics,methods -e parallel!:::.slaveRSOCK MASTER=CLUSTERNODE1 PORT=11038 TIMEOUT=2592000 XDR=TRUE".
Run Code Online (Sandbox Code Playgroud)
这里的ClusterNode1是一台当前的机器(我记录为Rebelion,它是管理员登录).
但是system(cmd, wait=FALSE, input="")给我这个:
Fatal error: creation of tmpfile failed -- set TMPDIR suitably? …Run Code Online (Sandbox Code Playgroud) 我的程序执行一些相当密集的操作,因此我使用临时文件来加快速度.我使用以下Java代码:
File scratchFile = new File(System.getProperty("java.io.tmpdir") + "WCCTempFile.tmp");
if (!scratchFile.exists())
scratchFile.createNewFile();
Run Code Online (Sandbox Code Playgroud)
此代码在Mac OS X和Windows上运行正常.它在Java临时目录中创建一个临时文件,该目录由操作系统确定.
但是,当我在Linux(特别是Linux Mint)上尝试此程序时,我在"scratchFile.createNewFile()"行中收到以下错误
java.io.IOException: Permission Denied
Run Code Online (Sandbox Code Playgroud)
我真的很困惑这个错误,因为我认为该System.getProperty("java.io.tempdir")方法收集的临时目录将是用户可以写入的目录(并且它在其他操作系统上).这不是Linux的情况吗?有没有办法授予临时目录的访问权限?是否有其他我应该使用的目录?
我们运行执行创建临时目录标准的代码:
import java.nio.file.Files;
Run Code Online (Sandbox Code Playgroud)
进而:
tmp = Files.createTempDirectory("ourprefix-");
Run Code Online (Sandbox Code Playgroud)
这有效地创建了下面的目录,/tmp/以便我们获得类似/tmp/ourprefix-1234或类似的内容。
不幸的是,这个基本目录/tmp/似乎是固定的,因为在我们的构建服务器上,很多东西都倾向于将它们的临时内容放在那里,而且 /tmp/ 所在的分区相当小,这是一个问题。
有没有办法从外部配置这个工具(即不更改代码)?我猜这/tmp/是一个默认值,可以通过设置一个特殊的环境变量或(更多的 Java 风格)将一个特殊的属性传递给编译器(例如-Djava.tmp.root=/path/to/my/larger/partition/tmp)来覆盖。
我尝试使用java.io.tmpdir但设置它没有任何效果;它似乎是默认值,以防万一什么都没给,createTempDirectory()但在我们的例子中,代码传递了一个前缀。
知道如何在不更改源代码的情况下实现我想要的吗?
编辑
经过一番调查,我发现这很好用:
import java.nio.file.Path;
import java.nio.file.Files;
import java.io.IOException;
public class TestTempDir {
public static void main(String[] args) throws IOException {
System.out.println(System.getProperty("java.io.tmpdir"));
Path path = Files.createTempDirectory("myprefix-");
System.out.println(path.toFile().getAbsolutePath());
}
}
Run Code Online (Sandbox Code Playgroud)
编译javac TestTempDir.java,准备mkdir tmp和运行java -Djava.io.tmpdir=pwd/tmp TestTempDir这只是按预期工作:
/my/work/path/tmp
/my/work/path/tmp/myprefix-1525078348397347983
Run Code Online (Sandbox Code Playgroud)
我的问题似乎与 Jenkins 及其 Maven 插件有关,它没有将设置的属性传递给测试用例:-/
我为管道创建了集成测试,以检查是否生成了正确的CSV文件:
class CsvBatchSinkTest {
@RegisterExtension
static SparkExtension spark = new SparkExtension();
@TempDir
static Path directory;
//this checks if the file is already available
static boolean isFileWithSuffixAvailable(File directory, String suffix) throws IOException {
return Files.walk(directory.toPath()).anyMatch(f -> f.toString().endsWith(suffix));
}
//this gets content of file
static List<String> extractFileWithSuffixContent(File file, String suffix) throws IOException {
return Files.readAllLines(
Files.walk(file.toPath())
.filter(f -> f.toString().endsWith(suffix))
.findFirst()
.orElseThrow(AssertionException::new));
}
@Test
@DisplayName("When correct dataset is sent to sink, then correct csv file should be generated.")
void testWrite() throws IOException, InterruptedException …Run Code Online (Sandbox Code Playgroud) 我想将以下(工作)java 测试转换为 Kotlin:
package my.project;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import static java.util.Collections.singletonList;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class MyTempFileTest {
@TempDir
public File tempFolder;
@Test
public void testTempFolder() {
Assertions.assertNotNull(tempFolder);
}
@Test
public void testTempFolderParam(@TempDir File tempFolder) {
Assertions.assertNotNull(tempFolder);
}
}
Run Code Online (Sandbox Code Playgroud)
使用 IntelliJ 的内置转换器,它变成:
package my.project
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.io.TempDir
import java.io.File
class MyTempFileTest {
@TempDir
var tempFolder: File? = null
@Test
fun testTempFolder() {
Assertions.assertNotNull(tempFolder)
}
@Test
fun …Run Code Online (Sandbox Code Playgroud)