java全写_Java 写文件
此次測試OutputStream都是使用FileOutputStream。
FileOutputStream用于向文件寫入文件。實現方式:
FileOutputStream buffer = null;try{
buffer= newFileOutputStream(file);byte[] n = "\n".getBytes();for (int i = 0; i < maxIndex; i++) {
buffer.write(line.generateLineMsg().getBytes());//隨機產生一行數據
buffer.write(n);//if (i % 10== 0) {//buffer.flush();//}
}
buffer.flush();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{
FileUtil.closeWriter(buffer);
}
OutputStreamWriter:專門用于處理文件的字符寫入流對象。實現方式:
OutputStreamWriter writer = null;try{
writer= new OutputStreamWriter(newFileOutputStream(file));for(int i = 0;i < maxIndex;i++) {
writer.write(line.generateLineMsg());
writer.write("\n");//if(i % 10 == 0) {//writer.flush();//}
}
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{
FileUtil.closeWriter(writer);
}
FileWriter:OutputStreamWriter的子類,在構造函數中,創建一個FileOutputStream初始化數據,其余和OutputStreamWriter相同;實現方式
FileWriter writer = null;try{
writer= newFileWriter(file);for(int i = 0;i < maxIndex;i++) {
writer.write(line.generateLineMsg());
writer.write("\n");//if(i % 10 == 0) {//writer.flush();//}
}
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{
FileUtil.closeWriter(writer);
}
BufferedWriter:存儲一個char數組(默認值是8192),用于緩存數據,需要一個Writer來寫數據,如BufferedWriter和FileWriter;
對于write(int paramInt),判斷當前存儲是否超過了緩存最大值,如果超過,則將緩存寫入到writer中;否則將數據添加到緩存中;
以下paramInt1 代表起始位置,paramInt2代表結束位置
對于write(char[] paramArrayOfChar, int paramInt1, int paramInt2)
如果paramInt2大于緩存大小(nChars值),即刻將緩存寫入到writer中,然后將paramArrayOfChar寫入writer中;否則將paramArrayOfChar從paramInt1到paramInt2寫入到緩存中,一旦緩存滿了,則寫入到writer里。
對于write(String paramString, int paramInt1, int paramInt2)
paramString從paramInt1到paramInt2寫入到緩存中,一旦緩存滿了,則寫入到writer里。
實現方式:
BufferedWriter buffer = null;try{
buffer= new BufferedWriter(new FileWriter(file),8192000);for(int i = 0;i < maxIndex;i++) {
buffer.write(line.generateLineMsg());
buffer.newLine();//if(i % 10 == 0) {//buffer.flush();//}
}
buffer.flush();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{
FileUtil.closeWriter(buffer);
}
FilterOutputStream 需要一個OutputStream來寫數據,如FileOutputStream,但是filterOutStream write(byte[] paramArrayOfByte, int paramInt1,int paramInt2)?是將byte數組一個個寫入到OutputStream中。
FilterOutputStream buffer = null;try{
buffer= new FilterOutputStream(newFileOutputStream(file));byte[] n = "\n".getBytes();for (int i = 0; i < maxIndex; i++) {
buffer.write(line.generateLineMsg().getBytes());
buffer.write(n);//if (i % 100 == 0) {//buffer.flush();//}
}
buffer.flush();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{
FileUtil.closeWriter(buffer);
}
BufferedOutputStream :是FilterOutputStream的子類,存儲一個byte數組(默認值是8192),用于緩存數據,需要一個OutputStream來寫數據,如FileOutputStream,
write(byte[] paramArrayOfByte, int paramInt1,int paramInt2) ?1.如果paramInt2大于緩存最大數(byte數組大小),將緩存數據寫入到流中,然后再將數據寫入到流中;在1不成立的情況下,如果paramInt2大于緩存剩余的大小(即還沒被寫的byte),清空緩存;不管2是否成立,最后都會將數據寫入到緩存中。
實現方式:
BufferedOutputStream buffer = null;try{
buffer= new BufferedOutputStream(new FileOutputStream(file),8192000);byte[] n = "\n".getBytes();for (int i = 0; i < maxIndex; i++) {
buffer.write(line.generateLineMsg().getBytes());
buffer.write(n);//if (i % 10 == 0) {//buffer.flush();//}
}
buffer.flush();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{
FileUtil.closeWriter(buffer);
}
NIO : java1.4開始發布,非阻塞式IO,實現方式:
FileChannel chanel = null;
FileOutputStream outputStream= null;try{
outputStream= newFileOutputStream(file);
chanel=outputStream.getChannel();
ByteBuffer buffer=ByteBuffer.allocateDirect(BUFSIZE);byte[] n = "\n".getBytes();for(int i = 0;i < maxIndex;i++) {
buffer.put(line.generateLineMsg().getBytes()); //隨機產生一行數據
buffer.put(n);if(i % 50000 == 0) {
buffer.flip();
chanel.write(buffer);
buffer.clear();
}
}
buffer.flip();
chanel.write(buffer);
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{
FileUtil.closeWriter(outputStream);
FileUtil.closeWriter(chanel);
}
要想NIO能快速寫文件,Buffer大小需要配置好,大點速度快點。
通過讓FileOutputStream,OutputStreamWriter,FileWriter,BufferedWriter,FilterOutputStream,BufferedOutputStream 寫1G文件的對比,
因為有緩存原因(緩存設置好點),BufferedWriter和BufferedOutputStream NIO 速度差不多且是最快的,只是BufferedOutputStream 要將String轉換成byte數組,如果純粹生成一行數據能用byte存儲,則BufferedOutputStream 速度很好,只是一行byte數組數據不好寫。
FilterOutputStream速度最慢,主要是一個個byte寫入流中。
部分函數說明
1,write(ch): 將一個字符寫入到流中。
2,write(char[]): 將一個字符數組寫入到流中。
3,write(String): 將一個字符串寫入到流中。
4,flush():刷新流,將流中的數據刷新到目的地中,流還存在。
5,close():關閉資源:在關閉前會先調用flush(),刷新流中的數據去目的地。然流關閉。
關于寫文件編碼格式:
對于OutputStreamWriter可以指定文件編碼格式保存數據。
對于FileWriter、FileOutputStream、BufferedWriter、FilterOutputStream、BufferedOutputStream沒有提供寫文件編碼設置,則根據Charset.defaultCharset().name()這個返回的編碼保存數據。
總結
以上是生活随笔為你收集整理的java全写_Java 写文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java邮件发送代码_用Java实现最简
- 下一篇: mysql分库分区分表怎么做_mysql