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.utilimport 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) {}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)