2

OK、作成した Web アプリケーションがあり、「text」という名前の新しいフォルダーにあるソース パッケージに含めたファイルから読み取ることができます。同じファイルに書き込もうとしていますが、うまくいきません。ファイルに書き込むことはありません。私の2つの方法のコードは次のとおりです。

public void fillItems() throws IOException{
    String path = "/OBrien_PROJ2/text/catalog.txt";
    BufferedReader br = new BufferedReader(new   InputStreamReader(getClass().getResourceAsStream(path))); 
    String text = null;
    while ((text=br.readLine())!=null){
       String[] itemArray = text.split(","); 
       // you might want to check array size
       items.add(new ItemBean (itemArray[0], itemArray[1], itemArray[2], itemArray[3], itemArray[4]));

    }

    br.close();
}



 public void createNewItem(String iD, String name, String description, String price, String quantity) throws IOException{
     String path = "/OBrien_PROJ2/text/catalog.txt";
     BufferedWriter bw = new BufferedWriter(new FileWriter(path));
     bw.write(iD + "," + name + "," + description + "," + price + "," + quantity);
     items.add(new ItemBean (iD, name, description, price, quantity));
     bw.flush();
     bw.close();
 }

問題があれば、私は NetBeans を使用しています

4

3 に答える 3

3

getServletContext().getRealPath("/")Web アプリケーションの現在のパスを取得するために使用します

あなたは私が今書いたこのコードを使ったほうがいいでしょう

<%@page import="java.io.BufferedOutputStream"%>
<%@page import="java.io.FileOutputStream"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <h1>Hello World!</h1>
    <%
        try{
        String file = getServletContext().getRealPath("/")+"text/test.txt";
        FileOutputStream fos = new FileOutputStream(file);
        BufferedOutputStream bos = new BufferedOutputStream(fos);

        bos.flush();
        bos.close();
        }
        catch(Exception ex){
            ex.printStackTrace();
            }
    %>
</body>

于 2013-04-20T20:39:26.957 に答える
0

読み取ったリソースはファイルではありません。クラスローダによってロードされるリソースです。デプロイされると、このリソースは war ファイル内から読み取られ、おそらくこの war ファイル内の jar ファイルから読み取られます。

Web アプリケーションのコンテンツを動的に変更しようとしないでください。たとえそれが可能であったとしても、webapp を再デプロイすると、作成または変更されたファイルが削除されるため、非常に悪い考えです。どこかに書き込む必要がある場合は、複数の webapp インスタンスで簡単に共有でき、同時実行をネイティブに処理できるため、データベース (できれば) に書き込むか、webapp の外部のファイルに書き込みます。

ところで、FileWriter コンストラクターの引数はファイル パスです。new FileWriter("/OBrien_PROJ2/text/catalog.txt")そのため、ファイル システム上のファイルに書き込みます ( webapp/OBrien_PROJ2/text/catalog.txt内ではありません)。

于 2013-04-20T20:05:24.273 に答える