@Test
public void test4(){
File file = new File("C:\\Users\\Administrator\\Desktop\\SUPPLIERFile.txt");
File newFile = new File("C:\\Users\\Administrator\\Desktop\\SUPPLIERnewFile.txt");
try {
if(!newFile.exists()){
newFile.createNewFile();
}
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String contentLine = null;
FileOutputStream fileOutputStream = new FileOutputStream(newFile,true);//true代表追加写入内容
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
StringBuffer sb = new StringBuffer();
while ((contentLine = bufferedReader.readLine()) != null){
sb.append(contentLine);
}
bufferedReader.close();
for (int i = 0;i < 200;i ++){
bufferedWriter.write(sb.toString()+",\r\n");
//记得flush不然文件不完整
bufferedWriter.flush();
}
fileOutputStream.flush();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
一次读取一整个文件,要保证内存够用
```java
@Test
public void test4(){
File file = new File("C:\\Users\\Administrator\\Desktop\\SUPPLIERFile.txt");
File newFile = new File("C:\\Users\\Administrator\\Desktop\\SUPPLIERnewFile.txt");
try {
if(!newFile.exists()){
newFile.createNewFile();
}else {
newFile.delete();
newFile.createNewFile();
}
String contentLine = null;
InputStream fileInputStream = new FileInputStream(file);
byte[] bytes = new byte[fileInputStream.available()];
fileInputStream.read(bytes);
FileOutputStream fileOutputStream = new FileOutputStream(newFile,true);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
StringBuffer sb = new StringBuffer();
contentLine = new String(bytes) + ",\r\n";
for (int i = 0;i < 200;i ++){
bufferedWriter.write(contentLine);
//记得flush不然文件不完整
bufferedWriter.flush();
}
bufferedWriter.flush();
bufferedWriter.close();
fileOutputStream.flush();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
使用RandomAccessFile读写文件,这里我只用了下读取文件,因为在处理过程中如果找到了目标文件的数据,还要在从头查询。所以要用一下RandomAccessFile.seek(0)回到文件头。
```java
public void saveBodyConfirm(){
File file = new File("D:\\work\\tingtongMongoDump\\2\\interface_confirm_log_id.json");
File newFile = new File("D:\\work\\tingtongMongoDump\\2\\interface_confirm_log_body.json");
BufferedInputStream fis = null;
try {
fis = new BufferedInputStream(new FileInputStream(file));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis,"utf-8"),10*1024*1024);
String contentLine = null;
RandomAccessFile raf = new RandomAccessFile("D:\\work\\tingtongMongoDump\\2020_interface_log_body.json", "rw");
raf.seek(0);
FileOutputStream fileOutputStream = new FileOutputStream(newFile,false);//true代表追加写入内容
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
StringBuffer sb = new StringBuffer();
while ((contentLine = bufferedReader.readLine()) != null){
String tempStr = contentLine.substring(contentLine.indexOf("_bodyDocId")+13,contentLine.indexOf("expireAt") - 3);
String tempStrBody = null;
while ((tempStrBody = raf.readLine()) != null){
tempStrBody = tempStrBody.substring(tempStrBody.indexOf("oid")+6,tempStrBody.indexOf("originalBody") - 4);
if(tempStr.equals(tempStrBody)){
sb.append(tempStrBody).append("\r\n");
//重新指向文件开始位置
raf.seek(0);
break;
}
}
}
bufferedWriter.write(sb.toString());
//记得flush不然文件不完整
bufferedWriter.flush();
raf.close();
bufferedReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}