【问题标题】:How to concatenate files from an array to into a new folder? [duplicate]如何将数组中的文件连接到新文件夹中? [复制]
【发布时间】:2016-06-27 23:13:56
【问题描述】:

我正在尝试编写一个 java 程序,它将接受两个参数,dirNamefileName。该程序将搜索dirName 中以.java 结尾的所有文件,然后将它们连接到一个名为fileName 的新文件夹中。到目前为止,我有一种方法可以在 dirName 中搜索 .java 文件,然后我将它们放在一个名为 list 的文件数组中,但现在我正在努力将这个数组中的文件迭代地添加到我的新文件夹 fileName .这是我目前所拥有的:

import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.util.ArrayList;

public class TwoFiles {

    File dir;
    File name;

    public TwoFiles(File dirName, File fileName) {

        dir = dirName;
        name = fileName;

    }

    public void setDir(File m) {
        this.dir = m;
    }

    public File getDir() {
        return dir;
    }

    public void setNewFolder(File n) {
        this.name = n;
    }

    public File getNewFolder() {
        return name;
    }

    public File[] Finder(File dir) {

        dir = getDir();

        return dir.listFiles(new FilenameFilter() {

                public boolean accept(File dir, String filename) {
                    return name.endsWith(".java"); }

        } );
    }

    public static void main(String[] args) {

        File folder = null;
        File newFolder = null;
        Integer b = null;

        TwoFiles tf = new TwoFiles(folder, newFolder);

        folder = tf.getDir();
        newFolder = tf.getNewFolder();

        File[] list = tf.Finder(folder); //add to an array


//here is where I've been experimenting to add files in `list` to new folder, `fileName`.

        for (File file : list)
          {
              FileInputStream inFile = new FileInputStream(file);

              while ((b = inFile.read()) != -1)
                  newFolder.write(b);
              inFile.close();
          }

        //copy files from array (list) into newFolder 

    }

}

感谢您的宝贵时间。

【问题讨论】:

  • 我认为您的意思是“复制”到新文件夹,而不是“连接”
  • 规范使用连接

标签: java arrays file


【解决方案1】:

您的 newFolder 变量是文件类型。你不能写进去。我假设,您的代码甚至无法编译。您必须在循环前创建一个输出流:

FileOutputStream fos = new FileOutputStream( newFolder);
try
{
    for (File file : list)
    {
        FileInputStream inFile = new FileInputStream(file);

          while ((b = inFile.read()) != -1)
              fos.write(b);
          inFile.close();
      }
}
finally
{
    fos.close();
}

【讨论】:

    【解决方案2】:

    您可以使用Apache Commons IO copyDirectory()IOFileFilter(用于.java 扩展名)将文件从一个目录复制到另一个目录。在此之前,您可以确保使用forceMkdir() 为您的filename 创建一个新目录。

    【讨论】:

      【解决方案3】:

      这是你的问题的我的版本: 我创建了其他构造函数,您可以在其中只放置您想要连接文件的目录/文件夹的路径,以及连接结果的文件。

      public class TwoFiles {
      
      private File dir;
      private File name;
      
      public TwoFiles(File dirName, File fileName) {
          dir = dirName;
          name = fileName;
      }
      
      public TwoFiles(String dirName, String destinationFileName) throws IOException{
          dir=new File(dirName);
          if(!dir.isDirectory()){
              throw new FileNotFoundException();//here your exception in case when dirName is file name instead folder name
          }
          name=new File(destinationFileName);
          if(!name.exists()){
              name.createNewFile();
          }
      }
      
      public void setDir(File m) {
          this.dir = m;
      }
      
      public File getDir() {
          return dir;
      }
      
      public void setNewFolder(File n) {
          this.name = n;
      }
      
      public File getNewFolder() {
          return name;
      }
      
      public void concatenateFiles() throws IOException{
          File[] files=dir.listFiles();
          for(File file: files){
              if(file.getName().endsWith(".java")){ //check is right file
                  prescribe(name, file);
              }
          }
      }
      
      /** prescribe file to new destination */
      private void prescribe(File destination, File file) throws IOException {
          FileInputStream inFile = new FileInputStream(file);
          FileOutputStream writer=new FileOutputStream(destination, true); //true means next file will be write beginning from end of the file
          int x;
          while((x=inFile.read())!=-1){
              writer.write(x);
          }
          String test="\n";   //next line in file
          writer.write(test.getBytes());
          writer.close();
          inFile.close();
      }
      
      public static void main(String...strings){
          String dirName="C/myApp/model/entity";
          String fileName="C:/Users/Dell/Desktop/temp/test.java";
          try {
              new TwoFiles(dirName, fileName).concatenateFiles();
      
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
      

      }

      【讨论】:

        猜你喜欢
        • 2014-12-03
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        • 2021-05-13
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 2013-08-26
        相关资源
        最近更新 更多