2012-10-25 17 views
8

Mam 4 różne pliki w niektórych miejscach, takich jak: D: \ 1.txt D: \ 2.txt D: \ 3.txt i D: \ 4.txtDołączanie wielu plików w jednym

Potrzebuję utworzyć nowy plik jako NewFile.txt, Powinien zawierać całą zawartość zawartą w powyższych plikach 1.txt, 2.txt, 3.txt 4.txt .......

Wszystkie dane powinny znajdować się w nowym pojedynczym pliku (NewFile.txt) ..

Proszę zasugerować mi jakiś pomysł, aby zrobić AME w Java lub Groovy ....

Odpowiedz

9

Oto jeden ze sposobów, aby to zrobić w 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' 
    } 
    } 
} 

Zaletą robi to w ten sposób (przez wywołanie getText na każdym z plików źródłowych) o to chodzi nie będzie musiał załadować całego pliku do pamięci przed zapisaniem jego zawartości do newfile. Jeśli jeden z twoich plików był ogromny, druga metoda mogłaby się nie udać.

+0

'file' definiuje' # leftShift' jak dobrze, więc może również zrobić polecenie 'src.inject (new File (dst)) {out, it -> new File (it) .withInputStream {out << it}}'. Wierzę, że otworzy i zamknie plik docelowy dla każdego pliku źródłowego, co może być problemem, jeśli masz do czynienia z wieloma małymi plikami. –

2

Jest to porywające

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()) } 
0

jestem pokazujące sposób, w jaki ma być zrobione w 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; 
    } 
} 

powiedz mi, jeśli masz jakiekolwiek wątpliwości

+0

Dlaczego przechwytujesz wyjątek, aby następnie ponownie go zawinąć jako nowy (bardziej uogólniony) wyjątek? Ponadto, jeśli zgłoszony zostanie wyjątek, czy nie może to pozostawić otwartych uchwytów plików (jeśli kod został zrobiony i umieszczony w ogólnej funkcji)? –

+0

faktycznie było to częścią większego projektu, który wdrożyłem. Napisałem nowy program pobierający części z modułu, który wykonał tę część. W moim rzeczywistym projekcie ta główna funkcja była osobną funkcją, która była wywoływana w innej funkcji. –

0

możesz zrobić coś takiego w Javie. Nadzieję, że to pomoże Ci rozwiązać problem: przykład

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); 

    } 
} 
0

One But wewnętrzny:

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

LUB

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

realizacja Tima jest lepiej, jeśli masz duże pliki.

1

Próbowałem rozwiązać ten i znalazłem jego dość łatwe, jeśli skopiować zawartość do tablicy i napisać tablicę do innego pliku

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); 
    } 
} 
} 
Powiązane problemy