未创建Java file.createNewFile文件且未抛出异常

时间:2012-04-01 15:59:44

标签: java io

以下代码并不总是创建该文件。 据我所知,这个代码第一次运行,虽然没有抛出异常并且createdFileSucceeded == true,但是文件没有被创建。

我在Windows上运行代码,java 6.

任何输入都可能有用

File file = new File(tmpDir, fileName);

try {
if (tmpDir == null) {
  String environmentHomePath // = somePath;
  tmpDir = new File(environmentHomePath, "SampleDumps");

  if (! tmpDir.exists() || ! tmpDir.isDirectory()) {
    boolean mkdirSucceeded = tmpDir.mkdir();
    if (! mkdirSucceeded) {
      throw new IOException("Failed creating directory: '" + tmpDir.getAbsolutePath() + "'");
    }
  }
}

if (file.exists()) {
  boolean deleteFileSucceeded = file.delete(); 
  if (! deleteFileSucceeded) {
    throw new IOException("Unable to delete pre existing sample file: '" + fileName + "'");
  }
}

boolean createFileSucceeded = file.createNewFile();
if (! createFileSucceeded) {
  throw new IOException("Unable to create sample file: '" + fileName + "'");
}

fw = new FileWriter(file);
bw = new BufferedWriter(fw);

StringBuilder sb = new StringBuilder("something...");

bw.write(sb.toString());
bw.flush();
}
catch (IOException ioe) {
log.warn("Unable to file invalid sample to file: '" + fileName + "'", ioe);
}
finally {
if (bw != null) {
  try {
    bw.close();
  } catch (IOException e) {
    log.warn("Unable to close Writer to file: '" + fileName + "'", e);
  }
}
else if (fw != null) {
  try {
    fw.close();
  } catch (IOException e) {
    log.warn("Unable to close Writer to file: '" + fileName + "'", e);
  }
}
}

4 个答案:

答案 0 :(得分:6)

如果file.createNewFile()返回true,则会创建一个文件。

最可能的解释是创建文件,但不是在您期望的位置。我希望您使用文件的相对路径名...


仔细查看您的代码和评论,我认为这正是发生的事情。看一下创建临时目录的方式。首先使用tmpdir作为父目录构造文件。然后测试以查看tmpdir是否为null并创建目录。但是你继续使用File对象,而STILL有一个null父目录!!

您需要在检查File之后创建tmpdir对象,并在需要时创建它。

答案 1 :(得分:2)

您处理tmpDir的方法存在缺陷。该文件正在某处创建

来自File(String, String)的Javadoc:

  

如果parent为null,则创建新的File实例,就像调用给定子路径名字符串上的单参数File构造函数一样。

答案 2 :(得分:2)

经过一些测试,我发现了错误并纠正了错误:

try {
    //create tmpDir if its null
    if (tmpDir == null) {
        String environmentHomePath = "D:/"; //change to somepath
        //tmpDir must be a directory path
        tmpDir = new File(environmentHomePath);

        if (!tmpDir.exists() || !tmpDir.isDirectory()) {
            boolean mkdirSucceeded = tmpDir.mkdir();
            if (!mkdirSucceeded) {
                throw new IOException("Failed creating directory: '" + tmpDir.getAbsolutePath() + "'");
            }
        }
    }
    //create the path
    File file = new File(tmpDir, fileName);
    if (file.exists()) {
        boolean deleteFileSucceeded = file.delete();
        if (!deleteFileSucceeded) {
            throw new IOException("Unable to delete pre existing sample file: '" + fileName + "'");
        }
    }
    boolean createFileSucceeded = file.createNewFile();
    if (!createFileSucceeded) {
        throw new IOException("Unable to create sample file: '" + fileName + "'");
    }

    fw = new FileWriter(file);
    bw = new BufferedWriter(fw);

    StringBuilder sb = new StringBuilder("something...");
    bw.write(sb.toString());
    bw.flush();
} catch (IOException ioe) {
    log.warn("Unable to file invalid sample to file: '" + fileName + "'", ioe);
} finally {
    try {
    if (bw != null) {
        try {
            bw.close();
        } catch (IOException e) {
            log.warn("Unable to close Writer to file: '" + fileName + "'", e);
        }
    }
    else if (fw != null) {
        try {
            fw.close();
        } catch (IOException e) {
            log.warn("Unable to close Writer to file: '" + fileName + "'", e);
    }
}

答案 3 :(得分:0)

检查您的文件名。它不应包含冒号异常的冒号.subcontainer { margin:0 auto; width: 80%; padding: 30px 20px; background-color: white; border-radius: 5px 5px 5px 5px; display:inline-block;; //add this line } 或任何其他类似字符。