1

我正在尝试在 Web 应用程序目录中创建一个文件TestFile.db 。但是直到现在我都没有成功。我不明白原因。

尝试创建文件的 JSP 片段:

        <% if(new FileMaker().makeFile()) {%>
        <h2>File Creation successful !</h2>
        <%} else {%>
            <h2>Unable to create a file !</h2>
            <%}%>

尝试创建文件的类:

public class FileMaker {

private boolean success = false;

public boolean makeFile() {
    try {
        File f = new File("TestFile.db"); // CREATE A FILE
        PrintWriter writer = new PrintWriter(f);
        writer.println("This is a test statement on a test file");
        writer.close();
        success = true;
    }catch(Exception exc) {
        exc.printStackTrace();
        return success;
    }
    return success;
}
}

web-app 命名App-1结构如下所示:

在此处输入图像描述

上面的代码不会产生任何异常并返回true,但我没有看到任何文件被创建。这是为什么 ?但是,如果我将声明更改为:

File f = new File("/App-1/TestFile.db");

我得到一个文件未找到异常。我不明白这是为什么。请解释这两种情况。如何在目录中创建文件App-1

4

2 回答 2

2

您需要为 filemaker 提供正确的路径。您可以通过从 servlet 上下文中获取正确的路径来做到这一点。

<%@page import="com.adtest.util.FileMaker"%>
<% if(new FileMaker().makeFile(this.getServletContext().getRealPath("/"))) {%>
    <h2>File Creation successful !</h2>
    <%} else {%>
        <h2>Unable to create a file !</h2>
        <%}%>

接下来在您的 filemaker 类中添加路径,并且仅在它不存在时创建。

public boolean makeFile(String path) {
    try {
        File f = new File(path+"\\TestFile.db"); // CREATE A FILE
        if(!f.exists())
            f.createNewFile();
        PrintWriter writer = new PrintWriter(f);
        writer.println("This is a test statement on a test file");
        writer.close();
        success = true;
    }catch(Exception exc) {
        exc.printStackTrace();
        return success;
    }
    return success;
}
于 2013-01-16T16:05:01.387 回答
0

尝试调试并使用 f.getAbsolutePath() 来获取创建文件的路径。因此,当您收到路径时,您可以对其进行修改。随着更多信息的出现,请更新问题。您收到未找到的文件,因为它似乎并没有真正创建。你真的调用 mkFile() 命令吗?:)

如果 exists() 返回 false,请执行以下操作:

file.createNewFile("fileName");
//write some data to file.

createFileName() 创建完全空白的新文件。

于 2013-01-16T15:52:39.367 回答