理解了流的概念,继续,java中有两种流,一种是字节流,一种是字符流。
其中InputStream 和 OutputStream 分别是所有字节输入流和字符输出流的父类。Reader和Writer 类分别是字符输入流和字符输出流的父类。
所有的IO操作,总的来说要进行三个大的步骤,分别是:1、建立与数据源相关的合适的数据流 2、用相应的方法进行读写操作 3、关闭流
(每个流的方法还是要仔细看的,下面用他们的子类FileInputStream和FileOutputStream实现,是最最常用的方法)
一,用InputStream读文件(注释很清楚了)——FileInputStr.java
package javase;
import java.io.*;
/**
* FileInputStream读取文件,如果文件不存在,则新建一个吧!
* 两个静态方法,分别用来创建文件和从流中读取文件返回字符串,并且,这两个方法会被后面的同一个包中的类调用到
* @author 幸运皮
* */
public class FileInputStr {
//创建一个文件
public static void createFiles(File files){
try{
files.createNewFile();
}catch(Exception e){
e.printStackTrace();
}
}
// 从流中读取信息,返回字符串
public static String readFileInputStr(FileInputStream fiss){
String s = null;
try{
byte[] data = new byte[1024];
int i = 0;//当前数组的下标
int n = fiss.read(); //read()方法是读取流中的第一个字节数据
while(n != -1){ //判断是不是到了流的末尾
data[i] = (byte)n;//返回值的int中只有最后一个字节是流中的有效数据,所以在获得流中的数值时要进行强制转换
i++;
n = fiss.read();
}
s = new String(data,0,i);//通过byte数组来自定一个新的String
}catch(Exception e){
e.printStackTrace();
}
return s;
}
public static void main(String[] args){
//声明对象流
FileInputStream fis = null;
try{
File file = new File("f://b.txt");
if (!file.exists()){ //如果不存在,则创建一个吧
createFiles(file);
}
fis = new FileInputStream(file); //创建流对象
String s = readFileInputStr(fis);//读取数据,并将读取到的数据存储到数组中
System.out.print(s);
}catch (Exception e){
e.printStackTrace();
}
finally {
try {
fis.close(); //关闭,要有的
}catch(Exception e){System.out.print("zhaobudao");}
}
}
}
二,用OutputStream写文件(注释很清楚了)——FileOutputStr.java
package javase;
import java.io.*;
import java.io.File;
/**
* @author 幸运皮
* FileOutputStr写文件
*/
public class FileOutputStr {
//将s字符串写入流fos
public static void writeString(String s,FileOutputStream fos){
try{
byte[] b1 = s.getBytes(); //String 转换为byte数组
fos.write(b1);
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
//要写入的字符串
String s = new String("好家伙zi");
//找到文件,如果文件不存在,则新建
File file = new File("f://nihao.txt");
if (!file.exists()){
FileInputStr.createFiles(file);//用到了上面的静态方法
}
FileOutputStream fos = null;
try{
fos = new FileOutputStream(file,true);//为true的时候是追加,默认是覆盖
writeString(s,fos);
} catch (FileNotFoundException e){
}finally{
try{
fos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
(未完待续)