- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想删除一个文件并用旧文件重命名另一个文件,但我无法移动这个文件,因为 java 抛出 java.nio.file.FileAlreadyExistsException
以下是代码片段 I正在使用
static void swapData(String origFilePath, String tempFilePath) throws IOException{
Path tempPath = FileSystems.getDefault().getPath(tempFilePath);
Path origPath = FileSystems.getDefault().getPath(origFilePath);
try{
String origFileName = null;
File origFileRef = new File(origFilePath);
if(Files.exists(origPath)){
origFileName = origFileRef.getName();
Files.delete(origPath);
if(Files.exists(origPath))
throw new IOException("cannot able to delete original file");
}
if(origFileName != null)
Files.move(tempPath, tempPath.resolveSibling(origFileName), StandardCopyOption.REPLACE_EXISTING);
}catch(IOException e){
throw e;
}
}
这是我收到的异常 在 Files.move(tempPath, tempPath.resolveSibling(origFileName), StandardCopyOption.REPLACE_EXISTING);
此外,当我在 Windows 资源管理器中看到此文件时,它的缩略图存在但无法打开。我不明白为什么会这样,如果我正在使用 REPLACE_EXISTING,为什么会抛出 FileAlreadyExistsException 异常。
我还编辑了之前的问题,因为它没有明确说明。
请帮忙。
阿努杰
最佳答案
检查在运行 Files.move
或 Files.copy
时是否有另一个线程持有同一文件资源。我有相同的异常和文件访问症状,并且能够在序列化文件访问后解决它。
此外,通过在执行 Files.copy
或 Files.move
时使用 REPLACE_EXISTING
选项,您不再需要对多个步骤进行编码删除原始文件然后重命名 tmp,尽管 Files.move
或 Files.copy
不保证是原子的。有一个 ATOMIC_MOVE
选项,但是我不喜欢实现特定的保证,如果 javadoc 描述的文件已经存在,则可能会抛出 IOException
。
ATOMIC_MOVE : The move is performed as an atomic file system operation and all other options are ignored. If the target file exists then it is implementation specific if the existing file is replaced or this method fails by throwing an IOException. If the move cannot be performed as an atomic file system operation then AtomicMoveNotSupportedException is thrown. This can arise, for example, when the target location is on a different FileStore and would require that the file be copied, or target location is associated with a different provider to this object.
关于java - Files.move 和 Files.copy 抛出 java.nio.file.FileAlreadyExistsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37721668/
我在 Ubuntu 14.04 上使用 Hadoop 2.5.1 现在我正在尝试使用 MultipleOutputs 类。这些作业可以在 8 行输入等小数据上正常运行。但是当我尝试用 1000 多行运
我尝试使用 BucketingSink 和自定义 ParquetSinkWriter 在 HDFS 上使用 Apache Flink 写入 parquet 文件。 这里是代码,上面的错误表明何时启用检
这段代码: File tmpFile = File.createTempFile(PREFIX_TMP, null, new File(reportPath)); logger.deb
我正在尝试在重新分区后将数据帧写入 s3 位置。但是,每当写入阶段失败并且 Spark 重试该阶段时,它就会抛出 FileAlreadyExistsException。 当我重新提交作业时,如果 sp
我在使用 Java 7 的 Files 类时遇到了一个看似奇怪的问题。我想在开始编写之前确保我的目录和文件存在以避免 FileNotFoundException,并且根据 Javadocs , cre
在我的代码中有一个用另一个文件替换一个文件的循环。 这是通过以下方式完成的: java.nio.file.Files.move(Path source, Path target, CopyOption
这个程序应该完成 MapReduce 工作。第一个作业的输出必须作为第二个作业的输入。 当我运行它时,出现两个错误: 线程“main”中的异常 org.apache.hadoop.mapred.Fil
这个问题在这里已经有了答案: How to overwrite the output directory in spark (9 个回答) 关闭 6 年前。 我正在运行这个命令行: hadoop f
我正在尝试以 JSON 格式将数据帧写入 s3 位置。但是,每当执行程序任务失败并且 Spark 重试该阶段时,它就会抛出 FileAlreadyExistsException。 A similar
我们正在使用 aws-java-sdk-1.7.4.jar hadoop-aws-2.7.5.jar 运行 Apache Spark 作业,以将 parquet 文件写入 S3 存储桶。 我们在 s3
我正在尝试将文件从InputStream复制到本地目录中。我创建了一个名为 test 的本地目录,它位于我的包根目录中。 public void copyFileFromInputStream(Inp
This question问了类似的问题。但是,就我而言,在调用 Files.createDirectories() 之前或之后该目录不存在。这种情况发生在 Oracle JDK 10.0.2 上。
即使成功运行了几十次 spark 程序,在最新的 sbt 包之后,最新的运行在启动 SparkContext 时出现 FileAlreadyExistsException: Note: I had r
我正在运行 dataFrame.rdd.saveAsTextFile("/home/hadoop/test") 试图将数据帧写入磁盘。这执行没有错误,但未创建文件夹。此外,当我再次运行相同的命令时(在
我使用以下代码通过 pyspark Insertinto 函数将数据帧写入配置单元分区表。 spark.conf.set("spark.sql.sources.partitionOverwriteMo
我在 reducer 中使用 MultipleOutputs。多重输出会将文件写入名为 NewIdentities 的文件夹。代码如下所示: private MultipleOutputs mos;
我正在写代码我正在用java nio api创建一个目录我的代码段是 Path target = Paths.get(""+folder_path+xx[0]); Set perms =
我试图在给定 here 的 Hadoop 中运行示例程序 当我尝试运行它时,我得到一个 org.apache.hadoop.mapred.FileAlreadyExistsException emil
我正在创建一个回滚功能,这是我想要实现的: 在与 data 文件夹 相同的位置创建一个 tmp 文件夹; 在执行任何操作之前,我将所有内容从data 文件夹 复制到tmp 文件夹(少量数据)。 回滚时
我正在尝试在 Amazon EMR 中运行 WordCount 程序,但我收到错误消息: Exception in thread "main" org.apache.hadoop.mapred.Fil
我是一名优秀的程序员,十分优秀!