2016-01-13 107 views
1

我想从多个目录中读取多个文件。到目前为止,我的程序只能读取多个文件,直到某个限制。文件[]无法处理多个文件

public void filesTobeCollected(String validpath) throws Exception { 
    this.folder = new File(validpath); 
    // this.file = new ArrayList<>(); 
    File[] fileEntry = folder.listFiles(); 
    System.out.println("directory path" + fileEntry.length); 

    /*****File upload read****/ 

    for (int i = 0; i < fileEntry.length; i++) { 

     /*this line weeds out other directories/folders*/ 
     if (fileEntry[i].exists()) { 

      file.add(String.valueOf(fileEntry[i])); 
      } 
     } 
    } 

,我通过这个函数发送值目录,

public List<String> filesTobeTested(ArrayList<String> file) throws 
    Exception { 
    Set<String> test = new HashSet<>(); 
    test.add("src/test/resources/gfd"); 
    test.add("src/test/resources/rds"); 
    test.add("src/test/resources/oiu"); 
    //test.add("src/test/resources/pol"); 

    System.out.println("directory path 2" + test); 

    for (int i = 0; i < 1; i++) { 

     for (Iterator<String> it = test.iterator(); it.hasNext();) { 
      String f = it.next(); 
      filesTobeCollected(f); 
      System.out.println("Found" + f); 
     } 

这里提交[] FileEntry的似乎有一定的限制,因为我用推test.add(“SRC /测试/资源多个目录/ obj“)File [] fileEntry不能处理更多文件。 File [] fileEntry的任何替代方法是否包含无限数量或未知数量的文件?

+2

你有没有得到任何异常? – Adi

+2

为什么你有'for(int i = 0; i <1; i ++){'?这个for循环只执行一次;你可以把它删除。 –

+1

'File [] fileEntry是否可以替代无限数量或未知数量的文件?' - 通常您应该使用像'ArrayList'而不是原始数组,但这不是问题,因为'listFiles();'已经分配一个适当大小的数组。请发布[mcve],以便我们重现此问题。 –

回答

3

File[] fileEntry incase of unlimited或unknown number of files?

是的,使用ArrayList<File>这将自动为您处理大小。


但这似乎并不成为问题,因为你知道所有你需要在创建阵列来处理这样尺寸精确File[] fileEntry = folder.listFiles();的文件。

删除此行

for (int i = 0; i < 1; i++) { 

这似乎useles ...如果问题仍然存在,发表您的堆栈跟踪

1

深深我认出你了,你要收集在一个这些文件。

在我的情况下,首先我会建议收集文件路径或文件,并将其添加到ArrayList<File>中,读取这些文件并在ArrayList<byte[]>中收集,稍后如果要制作它一个单一的文件,当然,你可以使用ObjectOutputStream类写ArrayList<byte[]>Object肯定创建一个单一的File

在这照顾文件阅读&写入字节大小不穿过你的Java堆空间边界。