java合并两个txt文件并生成新txt

java合并两个txt文件并生成新txt,第1张

import java.io.File

import java.io.PrintStream

import java.util.Scanner

/**

 * 2015年11月18日上午9:31:05

 * 

 * @author cs2110 TODO 合并数组

 *

 */

public class MergeFile {

    private String afile = "D:/1.txt"

    private String bfile = "D:/2.txt"

    private String mergefile = "D:/3.txt"

    /**

     * 读取文件里面的整数

     * 

     * @param input

     *            Scanner对象

     * @return 返回整形数组

     */

    public int[] readFile(Scanner input) {

        try {

            String temp = ""

            while (input.hasNextInt()) {

                temp += input.nextInt() + ","

            }

            String[] nums = temp.split(",")

            int[] arr = new int[nums.length]

            for (int index = 0 index < nums.length index++) {

                arr[index] = Integer.parseInt(nums[index])

            }

            return arr

        } catch (Exception e) {

            e.printStackTrace()

        }

        return null

    }

    /**

     * 合并数组

     * 

     * @param a

     *            数组1

     * @param b

     *            数组2

     * @return 整形数组

     */

    public int[] merge(int[] a, int[] b) {

        int len = a.length

        if (b.length < len) {

            len = b.length

        }

        int[] all = new int[a.length + b.length]

        int index = 0

        int aIndex = 0

        int bIndex = 0

        while (aIndex < len || bIndex < len) {

            if (a[aIndex] < b[bIndex]) {

                all[index] = a[aIndex]

                aIndex++

            } else {

                all[index] = b[bIndex]

                bIndex++

            }

            index++

        }

        if (aIndex < a.length) {

            while (aIndex < a.length) {

                all[index++] = a[aIndex++]

            }

        } else {

            while (bIndex < b.length) {

                all[index++] = b[bIndex++]

            }

        }

        return all

    }

    /**

     * 写入文件

     * 

     * @param print

     *            PrintStream

     * @param a

     *            数组

     */

    public void writeFile(PrintStream print, int[] a) {

        for (int index = 0 null != a && index < a.length index++) {

            print.append(a[index] + "\r\n")

        }

    }

    public static void main(String[] args) {

        MergeFile merge = new MergeFile()

        if (null != args && args.length > 2) {// 输入参数合法,则使用,否则按照默认

            merge.afile = args[0]

            merge.bfile = args[1]

            merge.mergefile = args[2]

        } else {

            System.out.println("Using the default file")

        }

        Scanner input = null

        int[] a = null

        int[] b = null

        int[] all = null

        try {

            input = new Scanner(new File(merge.afile))

            a = merge.readFile(input)

            input = new Scanner(new File(merge.bfile))

            b = merge.readFile(input)

            all = merge.merge(a, b)

            PrintStream print = new PrintStream(new File(merge.mergefile))

            merge.writeFile(print, all)

        } catch (Exception e) {

            e.printStackTrace()

        }

    }

}

参考代码如下:

public static void mergeFiles(String outFile, String[] files)

第一个参数是合并后生成文件的路径

第二个参数是你需要合并的文本文件列表

代码:

package org.lq.util

import static java.lang.System.out

import java.io.FileInputStream

import java.io.FileOutputStream

import java.io.IOException

import java.nio.ByteBuffer

import java.nio.CharBuffer

import java.nio.channels.FileChannel

import java.nio.charset.Charset

import java.nio.charset.CharsetDecoder

import java.nio.charset.CharsetEncoder

import java.util.Arrays

public class MergeFile {

public static final int BUFSIZE = 1024 * 8

public static void mergeFiles(String outFile, String[] files) {

FileChannel outChannel = null

out.println("Merge " + Arrays.toString(files) + " into " + outFile)

try {

outChannel = new FileOutputStream(outFile).getChannel()

for(String f : files){

Charset charset=Charset.forName("utf-8")

CharsetDecoder chdecoder=charset.newDecoder()

CharsetEncoder chencoder=charset.newEncoder()

FileChannel fc = new FileInputStream(f).getChannel() 

ByteBuffer bb = ByteBuffer.allocate(BUFSIZE)

CharBuffer charBuffer=chdecoder.decode(bb)

ByteBuffer nbuBuffer=chencoder.encode(charBuffer)

while(fc.read(nbuBuffer) != -1){

bb.flip()

nbuBuffer.flip()

outChannel.write(nbuBuffer)

    bb.clear()

    nbuBuffer.clear()

}

fc.close()

}

out.println("Merged!! ")

} catch (IOException ioe) {

ioe.printStackTrace()

} finally {

try {if (outChannel != null) {outChannel.close()}} catch (IOException ignore) {}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11711092.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存