|
今天复习了一下io,感觉有了更透彻点的理解
首先总结一下,FileInputStream类和FileOutputStream类
上面的两个类是字节输入流,是按着字节读取数据的。
现在来说一下他们的用法。
他们实现的接口分别是InputStream和OutputStream抽象类
输入流里有两个方法read()和read(byte[] b)我个人感觉第二方法比较常用
举个例子吧
import java.io.*;
public class Input {
static String content = "this is my io practice";
public static void main(String[] args) {
File file = new File("D:\\Hello.txt");
try{
if(file.exists()){
file.delete();
System.out.println("文件已删除");
}else{
file.createNewFile();
System.out.println("文件已创建");
}
}catch(Exception e){
e.printStackTrace();
}
try{
FileOutputStream out = new FileOutputStream("file");
byte[] b = content.getBytes();
out.write(b);
out.close();
}catch(Exception e){
e.printStackTrace();
}
try{
FileInputStream input = new FileInputStream("file");
byte[] b = new byte[100];
int len = input.read(b);
System.out.println("文件中的信息是:"+new String(b,0,len));
}catch(Exception e){
e.printStackTrace();
}
}
}
我们来分析一下这段代码。首先是要创建目标文件,也就是要输入或输出的数据文件。通过创建File类的实例。这里就不多做总结了。主要看输入输出的过程。
应为该过程可能会抛出异常,所以将输入输出的代码放在try catch语句内。先实例化一个FileOutputStream类的对象,通过这个对象我们可以向目标文件输入我们想要保存的内容。再类里面我首先声明并初始化了一个String变量 content。应该在前面加上static,因为在静态方法内是不可以调用和使用非静态的变量和方法的。
FileOutputStream是一个字节流输出类,所以我们需要将content这个字符串变量转换成一个字节型的变量--字节数组。这个可以通过String类的getBytes()方法。
将这个字符串常量转换成字节数组后,就可以对该数据进行操作了。通过FileOutputStream类的write(byte[] b)就可以将这个字节数组里面的内容写入到file文件中了。
现在来看,是怎么样将数据文件的内容输入到控制台的。FileInputStream这个类的对象可以做到。和FileOnputStream的过程相似。略有不同,首先都是要实例化一个对象,这个类的对象调用read(byte[] b)方法来读取内容。我们可以看到这个方法里面的参数也是一个字节数组。意思就是将数据输入到一个字节数组内。所以我们要在此之前创建一个字节数组。然后通过System.out.println()语句输出数据到控制台。在输出语句里面要用到String类的一个构造方法。new String(byte[] b,int star, int off);
这个方法的作用是输出一个字节数组内的从star位置到off之间的内容。
还有FileReader和FileWriter
BufferedReader BufferedWriter
BufferedInputReader BufferedOutputReader
他们都是特别类似的,只要明白了一种,其他的一看就全都明白了。
很简单吧,其实思路清晰了,静下心来看看,你就会觉得原来是如此简单。 |
|