字符流: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();
}
}