修改Java文件属性而不更改磁盘文件

时间:2013-12-11 00:54:49

标签: java file temporary-files

为了确保在处理过程中没有修改/删除java.io.File,我想在与原始文件不同的目录(例如系统临时目录)中创建一个临时文件

  • 用户无法访问
  • 但保留原始文件的信息(目录,名称,...)

我需要原始文件的信息,因为文件信息有很多访问权限,例如文件夹结构,文件名和文件扩展名。使用临时文件会破坏此信息。

不幸的是,不可能只设置文件的名称/目录,因为这会重命名/移动文件。

替代方法:也可以处理这两个文件,从源文件中获取信息并从临时文件中读取内容,但这似乎不是执行此操作的最佳方式。 / p>

有更好的方法吗?

祝你好运 马丁

2 个答案:

答案 0 :(得分:0)

我建议您使用java.io.File.createTempFile(String, String, File)并使用java.io.File.deleteOnExit();该文件必须是用户可访问的 - 否则用户无法写入该文件(QED)。也就是说,尝试这样的事情 -

try {
  File directory = new File("/tmp"); // or C:/temp ?
  File f = File.createTempFile("base-temp", ".tmp", directory); // create a new
              // temp file... with a prefix, suffix and in a tmp folder...
  f.deleteOnExit(); // Remove it when we exit (you can still explicitly delete when you're done). 
} catch (IOException e) {
  e.printStackTrace();
}

答案 1 :(得分:0)

听起来你想要做的就是在你阅读文件时阻止对文件的任何修改。这通常通过锁定文件来完成,这样只有您的进程才能访问它。作为示例(使用java.nio中的FileLock

try{
    File file = new File("randomfile.txt");
    FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
    FileLock lock = channel.lock();//Obtain a lock on the file
    try{

        //Do your things

    }
    finally{
        lock.release();//Release the lock on the file
        channel.close();
    }

} 
catch (IOException e) {
   e.printStackTrace();
}