String filepath=null;
public void dirScan()
{
File root = new File("/tmp/");
FilenameFilter beginswithm = new FilenameFilter()
{
public boolean accept(File directory, String filename) {
return filename.startsWith("201");
}
};
File[] files = root.listFiles(beginswithm);
for (File f: files)
{
filepath=f.toString();
System.out.println(filepath);
}
}
public void prepDownload() throws Exception {
File file = new File(filepath);
FileInputStream input = new FileInputStream(file);
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
setDownload(new DefaultStreamedContent(input, externalContext.getMimeType(file.getName()), file.getName()));
System.out.println("PREP = " + download.getName());
}
public DefaultStreamedContent getDownload() throws Exception {
System.out.println("GET = " + download.getName());
return download;
}
我的系统中有一个
tmp
文件夹。此文件夹包含一些动态生成的文件。我想将filepath作为动态preDownload()
方法传递。但是在我的方法中,只将filepath的最后一个值传递给preDownlaod
方法。在访问getDownload
方法时,它会获取最后一个文件路径值。我想从生成的行下载文件。每行都有唯一的文件但在我的情况下所有行都有相同的文件。
任何帮助或建议将不胜感激。提前谢谢。
答案 0 :(得分:1)
您是说对于找到的每个文件都匹配您希望传递给prepDownload()
的过滤器吗?如果是,那么您可以尝试进行以下更改:
...
for (File f: files){
filepath=f.toString();
prepDownload(filepath);
}
...
public void prepDownload(String filePath) throws Exception {
...
}
这将保证在找到每个文件时,您将调用prepDownload。
替代方法:
使用一套来跟踪事物。即:
Set<String> filepaths = new HashSet<String>();
public void dirScan(){
...
File[] files = root.listFiles(beginswithm);
for (File f: files)
{
filepath=f.toString();
filepaths.add(filepath);
}
}
public void prepDownload() throws Exception {
for(String filepath: filepaths){
File file = new File(filepath);
....
}
}