字符流 vs 字節流

字符流:Writer/Reader

字節流:OutputStream/InputStream


對於非純文本形式的文件,採用字節流操作;純文本格式的文件則可以採用字符流操作


package com.test.io;


import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;


import org.apache.commons.io.IOUtils;


public class ReadWriteFile {


public String readFile(String fileName) throws IOException {
InputStreamReader inputStreamReader = new InputStreamReader(this
.getClass().getClassLoader().getResourceAsStream(fileName));
BufferedReader reader = new BufferedReader(inputStreamReader);

StringBuffer buffer = new StringBuffer();
String line = reader.readLine();
while (line != null) {
buffer.append(line);
buffer.append("\n");
line = reader.readLine();
}
return buffer.toString();
}

public void writeFile(String data,String fileName) throws IOException {
OutputStream output = new FileOutputStream(ReadWriteFile.class.getClassLoader().getResource("").getPath() + fileName);
IOUtils.write(data, output);
}

public byte[] readFileStream(String fileName) throws IOException {
InputStream inputStream =ReadWriteFile.class.getClassLoader().getResourceAsStream(fileName);
int len = inputStream.available();
byte[] result = new byte[len];
for(int i = 0; i < len; i++){
result[i] = (byte)inputStream.read();
}
return result;

}

public void writeFileStream(byte[] datas,String fileName) throws IOException {
OutputStream output = new FileOutputStream(ReadWriteFile.class.getClassLoader().getResource("").getPath() + fileName,true);
BufferedOutputStream bufferOut = new BufferedOutputStream(output);
bufferOut.write(datas);
bufferOut.close();
}

public static void main(String[] args) throws IOException{
String inputfileName = "input1.jpg";
String outputfileName = "output";
ReadWriteFile instance = new ReadWriteFile();

byte[] inputFile = instance.readFileStream(inputfileName);
instance.writeFileStream(inputFile, outputfileName);
}
}


==================================================

package com.test.io;


import static org.junit.Assert.*;


import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;


import org.apache.commons.io.IOUtils;
import org.junit.Test;


public class StreamWriterCompare {


@Test
public void testStream() throws IOException {
String fileName = "testStream";
OutputStream out = null;
out = new FileOutputStream(StreamWriterCompare.class.getClassLoader().getResource("").getPath() + fileName,false);//overwrite content in file "testStream"
String str = "Hello World!!!";
BufferedOutputStream bufferOut = new BufferedOutputStream(out);
byte b[] = str.getBytes();
bufferOut.write(b);
bufferOut.close();

out = new FileOutputStream(StreamWriterCompare.class.getClassLoader().getResource("").getPath() + fileName,true);//append content in file "testStream"
out.write(b);
out.close();
}


@Test
public void testWriter() throws IOException {
String fileName = "testWriter";
        Writer out = null;                 
        out = new OutputStreamWriter(new FileOutputStream(StreamWriterCompare.class.getClassLoader().getResource("").getPath() + fileName,true));//append content to file "testWriter"            
        String str = "Hello World!!!";      
        out.write(str);                    
        out.close();
}

@Test
public void testCopyStream() throws IOException {
String inputFile = "testCopyStream-input.jpg";
String outputFile = "testCopyStream-output";
InputStream inputStream =StreamWriterCompare.class.getClassLoader().getResourceAsStream(inputFile);
FileOutputStream outStream = new FileOutputStream(StreamWriterCompare.class.getClassLoader().getResource("").getPath() + outputFile);            
assertNotNull(inputStream);
assertNotNull(outStream);
IOUtils.copy(inputStream, outStream);
inputStream.close();
outStream.close();
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章