0

PrimeFaces と JSF でテキスト ファイルをアップロードして読み取る必要があります。私の質問は、テキスト ファイルをアップロードしたとき、どこに保存されるのかということです。

これが私の.xhtmlファイルです:

<p:fileUpload value="#{send.file }" mode="simple" />
</h:form>
<p:commandButton actionListener="#{send.upload}"  value="Send" ajax="false" />

そしてJavaクラス:

public class Send {
    private UploadedFile file;

    public void upload() {
        if (file != null) {
            FacesMessage msg = new FacesMessage("Succesful", file.getFileName() + " is uploaded.");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
}

ファイルを読み取るこの例も見つかりました:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderExample {

    public static void main(String[] args) {

        try (BufferedReader br = new BufferedReader(new FileReader("C:\\testing.txt")))
        {
            String sCurrentLine;

            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

私の他の質問は、この例"C:\\testing.txt"ではパスとして与えられていますか? アップロードしたファイルを読むには、どのアドレスを指定する必要がありますか?

4

3 に答える 3

4

テキスト ファイルをアップロードすると、どこに保存されますか?

これは実際には関係のないことであり、JSF バッキング Bean コード内から関心を持つべきではありません。これは (部分的に) メモリに保存されるか、サーバーの一時的な保存場所に (部分的に) 保存され、定期的にワイプ/クリーンアップされます。永久的な保管場所として意図されたものではありません。アクション/リスナー メソッドでは、アップロードされたファイルのコンテンツを読み取り、選択した永続的な保存場所に保存するだけです。

例えば

private static final File LOCATION = new File("/path/to/all/uploads");

public void upload() throws IOException {
    if (file != null) {
        String prefix = FilenameUtils.getBaseName(file.getName()); 
        String suffix = FilenameUtils.getExtension(file.getName());
        File save = File.createTempFile(prefix + "-", "." + suffix, LOCATION);
        Files.write(save.toPath(), file.getContents());
        // Add success message here.
    }
}

FilenameUtilsは Apache Commons IO の一部であり、必要な依存関係であるため、既にインストールされている必要があります<p:fileUpload>File#createTempFile()また、上記の例では一時ファイルを正確に生成するわけではなく、一意のファイル名を生成するために使用されていることに注意してください。そうしないと、他の誰かが偶然に既存のファイルとまったく同じ名前のファイルをアップロードすると、上書きされてしまいます。Java 7 の一部であることにも注意してください。まだ Java 6 以前を使用している場合は、代わりにFiles#write()Apache Commons IOを入手してください。IOUtils

于 2013-09-04T13:21:31.517 に答える
0

同じ問題に関連するこのスレッドを見てください: How to upload file to http remote server using java? .

それでも問題が解決しない場合はお知らせください。;)

于 2013-09-04T09:26:05.300 に答える