2013-01-16 225 views
1

我正在嘗試在Web應用程序目錄中創建一個文件TestFile.db。但直到現在我還沒有成功。我不明白原因。無法在Web應用程序目錄中創建文件

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; 
} 
} 

命名爲App-1結構的web應用程序是這樣的:

enter image description here

上面的代碼不會創建任何異常並返回true但我沒有看到任何創建的文件。這是爲什麼 ?但如果我改變這樣的說法:

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

我得到一個文件未找到異常。我不明白這個原因。請解釋這兩種情況。 如何在目錄App-1內創建文件?

+1

不要使用scriplets。 :) – user

回答

0

嘗試調試並使用f.getAbsolutePath()獲取文件的路徑,在其中創建它。所以,當你收到路徑時,你可以修改它。隨着更多信息出現,請更新問題。 您收到文件未找到,導致它看起來像它不是實際創建。你真的調用mkFile()命令嗎? :)

如果存在()返回false,請執行下列操作:

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

createFileName()創建絕對空白的新文件。

+0

我想在應用程序上下文中創建文件。我的意思是'/ App-1/FileCreated' – saplingPro

+0

當我調試時,我從'getAbsPath'獲得'C:\ Program Files \ Apache Software Foundation \ Apache Tomcat 7.0.22 \ bin \ TestFile.db'。但是當我到達那裏時,我沒有看到任何文件 – saplingPro

+0

使用.exists()方法檢查文件 - 如果它返回false,那麼你只有java對象,但不是實際的文件。 – user

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類中添加路徑,並且只有在不存在extist時纔會創建。

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; 
} 
+0

默認情況下,路徑是項目的根。 – user

+1

是的默認根目錄是進程啓動的目錄,但他正在尋找Web應用程序目錄的路徑。 –

+0

好吧,我個人認爲在Web應用程序目錄的路徑中創建一個文件是個好主意。如果你要操縱文件,爲什麼不爲他們創建一個特殊的文件夾,而不是花費神經? :) – user

相關問題