
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()
}
}
}
ok!我给你写完了,首先你在D盘下面见两个文件分别是 file1.txt和file2.txt
如下所示
file1.txt
-----------------------------
id|name|class
1|test|class1
2|test2|class2
3|test3|class3
file2.txt
-----------------------------------
id|sex|teacher
1|male|wang
2|female|zhang
3|male|li
------------------------------------------
程序如下:
import java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
public class CombinFile {
private final String FILE1 = "d:\\file1.txt"
private final String FILE2 = "d:\\file2.txt"
private final String FILENAME="d:\\combinFile.txt"
private InputStream getFileStream(String fileName) throws FileNotFoundException{
FileInputStream fis = new FileInputStream(new File(fileName))
return fis
}
private void combinFile() throws IOException{
FileOutputStream fos = new FileOutputStream(new File(FILENAME))
InputStream fis1 = getFileStream(FILE1)
InputStream fis2 = getFileStream(FILE2)
int len = 0
while((len=fis1.read())!=-1){
fos.write(len)
}
System.out.println("第一个文件已经写到目标文件.....")
fis1.close()
fos.flush()
while((len=fis2.read())!=-1){
fos.write(len)
}
System.out.println("第二个文件已经写到目标文件")
fis2.close()
fos.flush()
fos.close()
System.out.println("文件整合完毕")
}
public static void main(String[] args) {
try {
new CombinFile().combinFile()
} catch (IOException e) {
e.printStackTrace()
}
}
}
--------------------------------------------------------
程序运行如下:
产生combinFile.txt文件,内容如下
id|name|class
1|test|class1
2|test2|class2
3|test3|class3
id|sex|teacher
1|male|wang
2|female|zhang
3|male|li
参考代码如下:
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条)