java基础整理-IO流

来源:互联网 发布:网络言论自由的优点 编辑:程序博客网 时间:2024/06/06 07:52

/*
 * IO流:
 * 字节流
 * 字节输入流 读取数据 InputStream
 * 字节输出流 写入数据 OutputStream
 * 字符流
 * 字符输入流 读取数据 Reader
 * 字符输出流 写入数据 Writer
 */

FileWriter---------------------------------------------------------------------

 /*
 * 通过查看API,Writer是一个抽象类。找子类使用FileWriter
 * A:FileWriter(File file) 
 * B:FileWriter(String fileName)
 *
 * 问题2:flush()和close()的区别?
 * flush():只刷新缓冲区,流对象还可以继续使用。
 * close():先刷新缓冲区,在关闭流对象。流对象不可以继续被使用。
 *
 * 不同的操作系统,对换行符的要求不一样:
 * windows:\r\n
 * linux:\n
 * mac:\r
 * 而有些软件,在制作的时候,为了通用,对任何换行符都是可以识别的。
 *
 * 1:写入数据的方式,有5种。
 * write(int ch)
 * write(char[] chs,int index,int len)
 * write(char[] chs)
 * write(String str,int index,int len)
 * write(String str)
 * FileWriter(String fileName,boolean append)追加字符串
 */
 
// 字符流 1字符 = 2字节 文件数据底层单位是字节,而我们现在是字符,所以它不能直接把数据写入文件。 把字符输出存储到缓冲区里面。
FileWriter fw = new FileWriter("a.txt");
// 调用写数据的功能,仅在缓存区里,需要flush()才能写入文件中
fw.write("hello,io,我来了!");
// 释放资源;1:让流对象变成垃圾;2:通知系统去释放和文件相关的资源。
fw.close();


FileRead--------------------------------------------------------------------------------

/*
 * 字符输入流读取数据步骤:
 * A:创建字符输入流对象
 * B:调用读取数据功能,并显示
 * C:释放资源
 * 
 * 1、read() 读取单个字节
 * 2、read(char[] cbuf) 每次读取数据,把数据存储到字符数组中,
 * 3、read(char[] cbuf,int off,int len) 每次读取数据,把数据存储到字符数组中,返回值是实际读取长度。
 *
 * 备注:
 *  1、read()方法读取数据返回int类型,一次读取一个字符,并自动移动到下一个数据位置等待读取。
 *  2、无数据时,将返回-1;
 *  3、read(char[] cbuf) 每次读取都会覆盖前一次的数据,若不完全覆盖将会重复上次数据
 */
 
方法1:
FileReader fr = new FileReader("d:\\Demo.java");
int ch = 0;
while((ch=fr.read())!=-1){
System.out.print((char) ch);
}
fr.close();

方法2:
FileReader fr = new FileReader("d:\\Demo.java");
char[] chs = new char[1024];
int len = 0;
while((len = fr.read(chs))!=-1){
System.out.print(new String(chs,0,len));
}

fr.close();

FileRead练习----------------------------------------------------

/*
 * 需求:我要把项目路径下的Demo.java复制到d:\\Demo2.java中
 */
  // 封装数据源
FileReader fr = new FileReader("Demo.java");
// 封装目的地
FileWriter fw = new FileWriter("d:\\Demo2.java");
char[] chs = new char[1024];
int len = 0;
while ((len = fr.read(chs)) != -1) {
//写入数据.
fw.write(chs,0,len);
}
// 释放资源
fw.close();
fr.close();

0 0