java - BufferedWriter 不检测只读目录
问题描述
我有一个读取和写入 csv 文件的 java 应用程序。我在我的 Mac 上创建了一个只读目录,我的应用程序将尝试将 csv 文件写入该目录。我使用 chmod 000 执行此操作。没有创建文件,但也没有引发错误。此外,检查文件是否是使用 Files.notExists() 创建的会返回 False。我的应用程序需要检测到没有创建 csv 来通知用户。这里发生了什么?
public void writeCSV(String fileName, List<String> results) throws IOException {
// fileName = "~/no_write/results.csv"
try(CSVPrinter printer = new CSVPrinter(Files.newBufferedWriter(Paths.get(fileName)), CSVFormat.DEFAULT.withHeader(header)) {
for (String result : results) {
printer.printRecord(result);
}
}
if (Files.notExists(Paths.get(fileName))) { // returns False but no_write directory is empty
throw new IOException();
}
if (!Files.exists(Paths.get(fileName))) { // Files.exists returns True
throw new IOException();
}
}
解决方案
如评论中所述,解决方案是获取绝对路径。使用绝对路径时,将获取目录权限并生成 IOException。不再需要检查文件是否存在。
public void writeCSV(String fileName, List<String> results) throws IOException {
// fileName = "~/no_write/results.csv"
try(CSVPrinter printer = new CSVPrinter(Files.newBufferedWriter(Paths.get(fileName).toAbsolutePath()), CSVFormat.DEFAULT.withHeader(header)) {
for (String result : results) {
printer.printRecord(result);
}
}
}
推荐阅读
- c# - open form on html button click in asp.net using C#
- python - 如何从数组中选择单独的字符串值并将它们用作熊猫数据框 Python 中的列名?
- reactjs - 为什么我的数组过滤处理程序没有按预期工作?
- angular - 如何将属性值与角度 8 中的变量绑定?
- javascript - 有没有办法计算所有 DOM 元素的堆叠上下文,以便使用 JavaScript 比较上述位置的任意两个元素?
- bash - 在组命令中更改 $IFS 是半持久的
- angular - 如何解决或检测 Angular+ 中的内存泄漏?
- nfc - NFC iOS 13 读写故障
- typescript - 如何将序列的 Observable 与单个值的 Observable 结合起来,然后展平这个结构
- python - Keras:如何重置优化器状态?