如何在文件类中动态传递字符串值(filepath)?

时间:2015-12-30 07:17:20

标签: java dynamic-arrays

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方法时,它会获取最后一个文件路径值。我想从生成的行下载文件。每行都有唯一的文件但在我的情况下所有行都有相同的文件。

任何帮助或建议将不胜感激。提前谢谢。

1 个答案:

答案 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);
        ....
    }
}