IO流:
处理数据类型:字节流(InputStream OutputStream)和字节流(Reader Writer)
数据流向不同:输入流和输出流(FileInputStream FileOutputStream)
输入流:
- InputStream 是所有的输入字节流的父类,它是一个抽象类。
- ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。
- ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。
输出流:
- OutputStream 是所有的输出字节流的父类,它是一个抽象类。
- ByteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。
- ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流
文件输入简单案例以及异常处理:
package reserve; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; import org.junit.Test; public class Main{
public static void main(String[] args) { }
@Test
public void test() {
FileInputStream input=null;
try {
input=new FileInputStream("Test/wenjian");
int a=-1;
while(true)
{
a=input.read();
if(a==-1)
break;
System.out.print((char)a);
}
System.out.println((char)a);
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
finally {
if(input!=null)
try {
input.close();//流的关闭是释放资源的操作
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
} }
测试截图:
package money;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner; import org.junit.Test;
public class Money{
public static void main(String[] args) { }
@Test
public void fileout() throws IOException {
FileOutputStream file=null;
try {
file=new FileOutputStream("Test/money");
file.write('a');
String string="中国你好,世界你好!";
file.write(string.getBytes());
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}finally {
try {
if(file!=null)
file.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} }
}
当没有当前需要输出的文件时,系统会在你写的当前路径下创建新的文件,刷新即可看到自动创建的那个文件。
输出文件中前N个最常出现的英文单词,并将结果输入到文本文件中:
package hu;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException; public final class Hu {
private Hu(){}
public static int countStringInFile(String filename , String word){
int counter = 0;
try{
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
String line = null;
while((line = br.readLine()) != null){
int index = -1;
while(line.length() >= word.length() && (index = line.indexOf(word)) >= 0){
counter++;
line = line.substring(index + word.length());
}
}
}catch(IOException e){
e.printStackTrace();
}
return counter;
}
public static int countString2(String filename , String word){
int counter = 0;
try{
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
String line = null;
int l = word.length();
while((line = br.readLine()) != null){
for(int i = 0 ; i <= line.length() - l; i++){
if(line.substring(i, i + l).equals(word)){
counter++;
}
}
}
}catch(IOException e){
e.printStackTrace();
}
return counter;
} public static void main(String[] args) {
String filename = "F:\\wenjian";
String word = "zhuo";
System.out.println(Hu.countStringInFile(filename, word));
}
}