文件类的写和读的方法详细讲解通熟易懂




import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


/**
 * 字符流和字节流
 * 字节流两个基类: InputStream, OutputStream
 * 字符流两个基类:Reader,Writer
 *需求:在硬盘上创建一个文件并写入文字数据
 * 找到一个专门用于操作文件的writer子类对象,
 * filewriter后缀名是父类名,前缀为该流对象功能
 */
//写动作的完成
public class ReaderWriterDemo {
public static void main(String[] args) {
try {
write();
} catch (IOException e) {
e.printStackTrace();
}
fileWriter();
FileReaderDemo.fileReader1();
FileReaderDemo.fileReader2(args);
// FileReaderTest.fileReader1(args);
}
public static void write() throws IOException {
//创建一个FileWriter对象该对象一被初始化就必须要明确被操作的文件 
//该文件会被创建到指定目录下,如果该目录已有同名文件将覆盖
FileWriter fw=new FileWriter("d:/1.txt");//明确数据要存放的目的地
fw.write("abasdf");//调用write方法,将字符串写入到流中
/*//刷新流对象中的缓冲中的数据,将数据刷到目的地中
fw.flush();*/
fw.close();
/*关闭流资源,但是关闭之前会刷新一次内部的缓冲中 数据
* 将数据刷到目的地中。和flush区别,flush刷新后,流可以继续使用,
* close刷新后会将流关闭
*/
}
//io异常的处理
public static  void  fileWriter() {
FileWriter fw1=null;
try {
fw1=new FileWriter("d:/doc.txt");
fw1.write("abasdf");
} catch (IOException e) {
// e.printStackTrace();
System.out.println(e.toString());
}finally {

try {
if (fw1!=null) {

fw1.close();
}
} catch (IOException e) {
e.printStackTrace();
}

}
}
//演示已有文件是数据续写
public static void fileWriterAppend () {
/*传递一个true参数,代表不覆盖已有文件,
并在已有文件的末尾处进行数据续写*/
FileWriter fw2=null;

try {
fw2=new FileWriter("d:/doc.txt",true);
fw2.write("nihao\r\nxiexieni ");
//在windows的记事本中不识别\n换行符在记事本中显示的是一个小黑框
//在windows要使用\r\n来换行
} catch (IOException e) {
e.printStackTrace();
}
}
}
class FileReaderDemo{
//创建一个文件读取流对象,和指定名称的文件相关联
//要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
 
public static void fileReader1 () {
FileReader fr=null;
try {
fr=new FileReader("d:/doc.txt");
//调用读取流对象的read方法
int    ch=fr.read();//read():一次读一个字符,会自动往下读
int ch2=0;
while ((ch2=fr.read())!=-1) {
System.out.print((char)ch2);
}
/*while (true) {//使用while循环输出文件内容
int    ch1=fr.read();//
if (ch1==-1) {
break;
}
System.out.println("ch1"+">--<"+(char)ch1);
}*/
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//使用字符数组作为缓存进行读取
public static void  fileReader2(String []args) {
FileReader fr1=null;

char[]buf=new char[1024];
//一般不知道文件具体大小就定义1024的整数倍
int num =0;
try {
fr1=new FileReader("d:/doc.txt");
while ((num=fr1.read(buf))!=-1) {
System.out.print(new String(buf,0,num) );
}
} catch (IOException e1) {
e1.printStackTrace();
}
/* try {//使用字符数组来一个一个的读
fr1=new FileReader("d:/doc.txt");
char [] buf=new char[3];
int num=fr1.read(buf);
System.out.println("num"+num+"......."+new String(buf));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
fr1.close();
} catch (IOException e) {
e.printStackTrace();
}
}*/

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值