8

我在某些位置有 4 个不同的文件,例如: D:\1.txt D:\2.txt D:\3.txt 和 D:\4.txt

我需要创建一个新文件为NewFile.txt,它应该包含上述文件 1.txt、2.txt、3.txt 4.txt 中存在的所有内容......

所有数据都应该出现在新的单个文件(NewFile.txt)中。

请建议我在 java 或 Groovy 中做同样的事情......

4

7 回答 7

10

这是在 Groovy 中执行此操作的一种方法:

// Get a writer to your new file
new File( '/tmp/newfile.txt' ).withWriter { w ->

  // For each input file path
  ['/tmp/1.txt', '/tmp/2.txt', '/tmp/3.txt'].each { f ->

    // Get a reader for the input file
    new File( f ).withReader { r ->

      // And write data from the input into the output
      w << r << '\n'
    }
  }
}

这样做的好处(通过调用getText每个源文件)是它不需要将整个文件加载到内存中,然后再将其内容写入newfile. 如果您的一个文件很大,则另一种方法可能会失败。

于 2012-10-25T10:09:46.103 回答
3

这是时髦的

def allContentFile = new File("D:/NewFile.txt")
def fileLocations = ['D:/1.txt' , 'D:/2.txt' , 'D:/3.txt' , 'D:/4.txt']
fileLocations.each{ allContentFile.append(new File(it).getText()) }
于 2012-10-25T10:20:32.333 回答
1

我尝试解决这个问题,如果将内容复制到数组并将数组写入不同的文件,我发现它很容易

public class Fileread 
{

public static File read(File f,File f1) throws FileNotFoundException
{

    File file3=new File("C:\\New folder\\file3.txt");
    PrintWriter output=new PrintWriter(file3);
    ArrayList arr=new ArrayList();
    Scanner sc=new Scanner(f);
    Scanner sc1=new Scanner(f1);
    while(sc.hasNext())
    {
        arr.add(sc.next());

    }
     while(sc1.hasNext())
    {
        arr.add(sc1.next());

    }
       output.print(arr);
   output.close();

    return file3;
}
/**
 *
 * @param args
 * @throws FileNotFoundException
 */
public static void main(String[] args) {
    try
    {
   File file1=new File("C:\\New folder\\file1.txt");
   File file2=new File("C:\\New folder\\file2.txt");
   File file3=read(file1,file2);
   Scanner sc=new Scanner(file3);
   while(sc.hasNext())
       System.out.print(sc.next());

    }
    catch(Exception e)
    {
        System.out.printf("Error  :%s",e);
    }
}
}
于 2014-03-03T19:42:58.960 回答
1

我正在向您展示它在 java 中的完成方式:

public class Readdfiles {
  public static void main(String args[]) throws Exception
  {
    String []filename={"C:\\WORK_Saurabh\\1.txt","C:\\WORK_Saurabh\\2.txt"};
    File file=new File("C:\\WORK_Saurabh\\new.txt");
    FileWriter output=new FileWriter(file);
    try
    {   
      for(int i=0;i<filename.length;i++)
      {
        BufferedReader objBufferedReader = new BufferedReader(new FileReader(getDictionaryFilePath(filename[i])));

        String line;
        while ((line = objBufferedReader.readLine())!=null )
        {
          line=line.replace(" ","");

          output.write(line);
        }
        objBufferedReader.close();
      }
      output.close();
    }
    catch (Exception e) 
    {
      throw new Exception (e);
    }
  }

  public static String getDictionaryFilePath(String filename) throws Exception
  {
    String dictionaryFolderPath = null;
    File configFolder = new File(filename);
    try 
    {
      dictionaryFolderPath = configFolder.getAbsolutePath();
    } 
    catch (Exception e) 
    {
      throw new Exception (e);
    }
    return dictionaryFolderPath;
  }
}

如果您有任何疑问,请告诉我

于 2012-10-25T10:28:47.773 回答
0

你可以在 Java 中做这样的事情。希望它可以帮助您解决您的问题:

import java.io.*;
class FileRead {
public void readFile(String[] args) {
for (String textfile : args) {

try{
      // Open the file that is the first 
      // command line parameter
      FileInputStream fstream = new FileInputStream(textfile);
      // Get the object of DataInputStream
      DataInputStream in = new DataInputStream(fstream);
      BufferedReader br = new BufferedReader(new InputStreamReader(in));
      String strLine;
      //Read File Line By Line
      while ((strLine = br.readLine()) != null)   {
      // Print the content on the console
      System.out.println (strLine);

    // Write to the new file
      FileWriter filestream = new FileWriter("Combination.txt",true);
      BufferedWriter out = new BufferedWriter(filestream);
      out.write(strLine);
      //Close the output stream
      out.close();

      }
      //Close the input stream
      in.close();
        }catch (Exception e){//Catch exception if any
      System.err.println("Error: " + e.getMessage());
      }
}
}

 public static void main(String args[]) {
 FileRead myReader = new FileRead();
 String fileArray[] = {"file1.txt", "file2.txt", "file3.txt", "file4.txt"};
    myReader.readFile(fileArray);

  }
}
于 2012-10-25T10:40:47.147 回答
0

一个班轮示例:

def out = new File(".all_profiles")
['.bash_profile', '.bashrc', '.zshrc'].each {out << new File(it).text}

或者

['.bash_profile', '.bashrc', '.zshrc'].collect{new File(it)}.each{out << it.text}

如果你有大文件,Tim 的实现会更好。

于 2012-10-25T12:11:02.653 回答
0
public static void main(String[] args) throws IOException {
    List<String> files=new ArrayList<String>();

        for(int i=10;i<14;i++)
            files.add("C://opt/Test/test"+i+".csv");

    String destFile ="C://opt/Test/test.csv";
    System.out.println("TO "+destFile);
    long st=System.currentTimeMillis();
    mergefiles(files, destFile);
    System.out.println("DONE."+(st-System.currentTimeMillis()));
}

public static void mergefiles(List<String> files,String destFile){
    Path outFile = Paths.get(destFile);
    try(FileChannel out=FileChannel.open(outFile, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
          for(String file:files) {
            Path inFile=Paths.get(file);
            System.out.println(inFile);
            try(FileChannel in=FileChannel.open(inFile, StandardOpenOption.READ)) {
              for(long p=0, l=in.size(); p<l; )
                p+=in.transferTo(p, l-p, out);
            }catch (IOException e) {
                 System.out.println("ERROR:: "+e.getMessage());
            }
            out.write(ByteBuffer.wrap("\n".getBytes()));
          }
        } catch (IOException e) {
             System.out.println("ERROR:: "+e.getMessage());
        }
}
于 2018-08-04T16:50:33.950 回答