Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java随机存取文件_Java - Fatal编程技术网

Java随机存取文件

Java随机存取文件,java,Java,基本上我使用这个类来做一些事情。这是在tomcat JVM中运行的应用程序的一部分。我注意到,每当调用此方法时,它都会创建一个与参数同名的文件,在raf.close()之后,它仍然存在。 如何确保删除临时文件 提前感谢。是否改用 我知道这不会给你和RandomAccessFile一样的特性,但是你可以在上面构建你所需要的 事实上我甚至不知道你为什么要把这些东西写进文件。这是一种使用情况跟踪吗?为什么不把它存储在内存中呢?我假设您只显示了代码的一小部分,并且有一个很好的理由,您使用的是Random

基本上我使用这个类来做一些事情。这是在tomcat JVM中运行的应用程序的一部分。我注意到,每当调用此方法时,它都会创建一个与参数同名的文件,在raf.close()之后,它仍然存在。 如何确保删除临时文件

提前感谢。

是否改用

我知道这不会给你和RandomAccessFile一样的特性,但是你可以在上面构建你所需要的


事实上我甚至不知道你为什么要把这些东西写进文件。这是一种使用情况跟踪吗?为什么不把它存储在内存中呢?

我假设您只显示了代码的一小部分,并且有一个很好的理由,您使用的是
RandomAccessFile
,而它似乎没有进行任何随机访问

我会这样做:

    public void exportUrlsToFile(String file, String urls) throws IOException {
    String[] urlsArray = urls.split("\\s+");// split on one or more white space characters.

    // create a fresh file
    RandomAccessFile raf = new RandomAccessFile(file, "rw");

    for (String line : urlsArray) {
        line = line.trim();
        if (line.isEmpty()) {// this won't happen!
            continue;
        }
        raf.writeBytes(line);
        raf.writeBytes(newline);
    }
    // close the file handler
    raf.close();
}

编辑:我同意,我们不希望close()上的IOException引起问题。总比忽略它好的是记录一个“我们从来没想到会看到这个…”例外。我经常创建一个closeWithoutException()方法来包装它。Close-Exception似乎滥用了已检查的异常,因为调用方无法做出任何响应。

更好的问题是,为什么要费尽心机创建文件、将内容写入文件,然后删除文件

不管怎样,你不需要一个随机访问的文件-一个文件编写器会更好

要确保文件被删除,请按照Eddie的建议执行,并将删除放在finnaly块中-但您还需要确保处理raf.close()IOException。。。比如:

public void exportUrlsToFile(String file, String urls) throws IOException {
  String[] urlsArray = urls.split("\\s+");

  // create a fresh file
  RandomAccessFile raf = new RandomAccessFile(file, "rw");

  try {
    for (String line : urlsArray) {
      line = line.trim();
      if (line.isEmpty()) { // this won't happen!
        continue;
      }
      raf.writeBytes(line);
      raf.writeBytes(newline);
    }
  } finally {
    // don't leak file handles on Exception -- put close in "try/finally"
    try { raf.close(); } catch (IOException e) { /* ignore */ }
    File todelete = new File(file);
    if (!todelete.delete()) {
      // Log a complaint that we couldn't delete the temp file
    }
  }
}
}最后{ 尝试 { raf.close(); } 捕获(最终IOEX) { //在14年的Java编程生涯中,我仍然不知道在这里该做什么!;-) } 最后 { File todelete=新文件(File); 如果(!todelete.delete()){ //记录无法删除临时文件的投诉 } } } 编辑:

您可能还意味着在Tomcat进程完成后,文件仍然存在,您希望它消失。如果是这种情况,请查看java.io.File.deleteOnExit()。当Tomcat JVM存在时,应该会删除这些文件。

您尝试过这个吗

} finally { try { raf.close(); } catch(final IOException ex) { // in 14 years of Java programming I still don't know what to do here! ;-) } finally { File todelete = new File(file); if (!todelete.delete()) { // Log a complaint that we couldn't delete the temp file } } }
奇怪。。。你想要这个文件干什么?在14年里,这就是我所做的一切:-)(很好地记录它…但似乎毫无意义,因为它从未发生过!)原则上,我只记录它;我也从未有过类似的情况。这是对检查异常的证明之一,方法“抛出”一个异常是因为接口声明了它,但实际上不是这样。@Software Monkey:对我来说,这不是对检查异常的证明,而是对检查异常的滥用。我可以想象关闭抛出一个异常-NFS离开时打开一个文件可能会导致它。这是一个struts web应用程序,为了让struts下载一个文件,你需要从一个文件流式传输。我一直认为随机访问文件是为了在内存中创建文件而不创建物理文件。
 File temp = File.createTempFile("file", ".tmp");
 temp.deleteOnExit( );