【问题标题】:How to uploaded and read text file in JSF and PrimeFaces?如何在 JSF 和 PrimeFaces 中上传和读取文本文件?
【发布时间】:2013-09-07 17:28:48
【问题描述】:

我需要使用 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" 是作为路径给出的?我必须提供哪个地址才能阅读我上传的文件?

【问题讨论】:

标签: java jsf file-upload primefaces readfile


【解决方案1】:

我是这样把文件变红的

private UploadedFile file;

public void upload() {
    if (file != null && !"".equals(file.getFileName())) {
        try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(file.getInputstream(), "UTF-8"))) {
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }

        } catch (Exception ex) {
            LOG.error("Error uploading the file", ex);
        }
    }
}

【讨论】:

    【解决方案2】:

    当我上传文本文件时,它存储在哪里?

    这实际上与您无关,您不应该对 JSF 支持 bean 代码中的内容感兴趣。它(部分)存储在内存中和/或(部分)存储在服务器的临时存储位置中,这些位置将定期擦除/清理。它绝对不是永久存储位置。您应该在 action/listener 方法中只读取上传的文件内容并将其存储在您选择的永久存储位置。

    例如

    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 的一部分,因为它是 &lt;p:fileUpload&gt; 的必需依赖项。另请注意,File#createTempFile() 在上面的示例中确实不完全生成临时文件,但它只是用于生成唯一的文件名。否则,当其他人碰巧上传了与现有文件同名的文件时,它将被覆盖。另请注意,Files#write() 是 Java 7 的一部分。如果您仍在使用 Java 6 或更早版本,请改用 Apache Commons IO IOUtils

    【讨论】:

      【解决方案3】:

      请查看与同一问题相关的此线程: how to upload file to http remote server using java?.

      如果对您没有帮助,请告诉我,我会处理的。 ;)

      【讨论】:

        猜你喜欢
        • 2012-04-04
        • 1970-01-01
        • 2012-03-19
        • 2013-07-23
        • 2014-06-22
        • 2020-02-25
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        相关资源
        最近更新 更多