首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在JSF和PrimeFaces中上传和读取文本文件?

如何在JSF和PrimeFaces中上传和读取文本文件?
EN

Stack Overflow用户
提问于 2013-09-04 17:18:49
回答 3查看 11.3K关注 0票数 0

我需要上传和阅读一个文本文件与PrimeFaces和JSF。我的问题是,当我上传文本文件时,它存储在哪里?

这是我的.xhtml文件:

代码语言:javascript
运行
复制
<p:fileUpload value="#{send.file }" mode="simple" />
</h:form>
<p:commandButton actionListener="#{send.upload}"  value="Send" ajax="false" />

和Java类:

代码语言:javascript
运行
复制
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);
        }
}

我还找到了这个读取文件的示例:

代码语言:javascript
运行
复制
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"是作为路径给出的吗?我必须提供哪个地址才能读取我上传的文件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-04 21:21:32

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

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

例如。

代码语言:javascript
运行
复制
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()并不完全生成一个临时文件,但它只是用来生成一个唯一的文件名。否则,当其他人偶然上传与现有文件名称完全相同的文件时,该文件将被覆盖。还要注意,Files#write()是Java7的一部分。如果您仍在使用Java6或更早的版本,请使用Apache Commons IO IOUtils

票数 4
EN

Stack Overflow用户

发布于 2013-09-04 17:26:05

请看看这个与同一问题相关的帖子:how to upload file to http remote server using java?

如果对你没有帮助,请让我知道,我会通过的。;)

票数 0
EN

Stack Overflow用户

发布于 2018-06-16 01:17:27

我是这样修改文件的

代码语言:javascript
运行
复制
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);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18609906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档