本帖最后由 胡天杭 于 2014-8-27 01:03 编辑
1、FileWriter- package com.itheima.io;
- import java.io.FileWriter;
- import java.io.IOException;
- /**
- * 字符流和字节流:
- *
- * 字节流两个基类: InputStream OutputStream
- *
- * 字符流两个基类: Reader Writer
- *
- * 字符流的特点。
- *
- * 以操作文件为主演示: 需求:在硬盘上,创建一个文件并写入一些文字数据
- * 找到一个专门用于操作文件的Writer子类对象。FileWrite。后缀名是父类名。前缀名是该流对象的功能。
- *
- * @author StephenHu
- *
- */
- public class FileWriterDemo {
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- // 创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件
- // 而且该文件会被创建到指定目录下。并覆盖同名文件
- // 该步骤就是明确数据要存放的目的地
- FileWriter fw = new FileWriter("D:\\javaDemo\\test.txt");
- // 调用write方法,将字符串写入到流中。
- fw.write("hahahahah");
- // 刷新流对象中缓冲的数据
- // 将数据刷到目的文件中
- fw.flush();
- fw.write("wwwwwww");
- fw.flush();
- fw.write("333hahahahah");
- // 关闭流资源,但关闭前会flush一次
- fw.close();
- // IO异常处理
- FileWriter fw1 = null;
- try {
- fw1 = new FileWriter("h:\\javaDemo\\test1.txt");
- fw1.write("hhhhhhhh");
- } catch (IOException e) {
- System.out.println("catch1:" + e.toString());
- } finally {
- try {
- if (fw1 != null) {
- fw1.close();
- }
- } catch (IOException e) {
- System.out.println("catch2:" + e.toString());
- }
- }
- /*
- * 对已有文件的续写
- */
- FileWriter fw2 = null;
- try {
- // 传递一个true参数,代表不覆盖已有的文件
- fw2 = new FileWriter("D:\\javaDemo\\test.txt", true);
- fw2.write("\n\r\n\rwwwww");
- } catch (IOException e) {
- System.out.println("catch1:" + e.toString());
- } finally {
- try {
- if (fw2 != null) {
- fw2.close();
- }
- } catch (IOException e) {
- System.out.println("catch2:" + e.toString());
- }
- }
- }
- }
复制代码
2、FileReader
- package com.itheima.io;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- public class FileReaderDemo {
- public static void main(String[] args) throws IOException {
- // 创建一个文件读取流对象,和指定名称的文件相关联
- // 要保证该文件是已经存在的,如果不存在,会发生异常FileNotFoundException
- FileReader fr = new FileReader("D:\\javaDemo\\test.txt");
- // 调用读取流对象的read方法
- // read方法一次读一个字符,而且自动继续往下读
- int ch = 0;
- String str = "";
- while ((ch = fr.read()) != -1) {
- str += (char) ch;
- }
- p(str);
- fr.close();
- // 定义一个字符数组,用于存储独到的字符
- // 改read(char[])返回的是独到的字符个数
- FileReader fr1 = new FileReader("D:\\javaDemo\\test.txt");
- char[] buf = new char[1024];
- int num = 0;
- while ((num = fr1.read(buf)) != -1) {
- p(new String(buf, 0, num));
- }
- fr1.close();
- // 读取一个.java文件,并打印在控制台上
- FileReader fr2 = new FileReader(
- "D:\\javaWorkspace\\Practices\\src\\com\\itheima\\io\\DateDemo.java");
- char[] buf1 = new char[1024];
- int num1 = 0;
- while ((num1 = fr2.read(buf1)) != -1) {
- System.out.print(new String(buf1, 0, num1));
- }
- fr2.close();
- }
- private static void p(Object o) {
- System.out.println(o);
- }
- }
复制代码
3、简单的字符串文件拷贝
- package com.itheima.io;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- public class CopyTextDemo {
- /**
- * 将C盘一个文本文件复制带D盘
- *
- * 复制原理: 其实就是讲C盘下的文件数据储存到D盘的一个文件中
- *
- *
- * 1、在D盘创建一个文件,用于储存C盘文件中的数据 2、定义读取流和C盘文件关联 3、通过不断的读写完成数据存储
- *
- * @throws IOException
- *
- */
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- // copy_1();
- copy_2();
- }
- public static void copy_1() throws IOException {
- // 创建目的地
- FileWriter fw = new FileWriter("D:\\javaDemo\\testTo.txt");
- // 与已有文件关联
- FileReader fr = new FileReader("D:\\javaDemo\\testFrom.txt");
- int ch = 0;
- while ((ch = fr.read()) != -1) {
- fw.write(ch);
- }
- fw.close();
- fr.close();
- }
- public static void copy_2() {
- FileWriter fw = null;
- FileReader fr = null;
- try {
- fw = new FileWriter("D:\\javaDemo\\testCopyTo.txt");
- fr = new FileReader("D:\\javaDemo\\test.txt");
- char[] buf = new char[1024];
- int len = 0;
- while ((len = fr.read(buf)) != -1) {
- fw.write(buf, 0, len);
- }
- } catch (IOException e) {
- // TODO: handle exception
- throw new RuntimeException("读写失败");
- } finally {
- if (fr != null && fw != null) {
- try {
- fw.close();
- fr.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }<strong>
- </strong>
复制代码
4、问了提高效率,利用缓冲区写文件
- package com.itheima.io;
- import java.io.BufferedWriter;
- import java.io.FileWriter;
- import java.io.IOException;
- public class BufferedWriterDemo_2_1 {
- /**
- * 缓冲区的出现是为了提高流的操作效率而出现的 所以创建缓冲区之前,必须先有流对象
- */
- public static void main(String[] args) {
- // 创建一个字符写入流对象
- FileWriter fw = null;
- BufferedWriter bw = null;
- try {
- fw = new FileWriter(".\\testData\\buf.txt");
- // 为了提高字符写入流效率,加入了缓冲技术
- // 使用方法:讲需要提高效率的流对象作为参数传递给缓冲区的构造函数
- bw = new BufferedWriter(fw);
- for (int i = 0; i < 5; i++) {
- bw.write("hhhhhhhh" + i);
- bw.newLine();
- bw.flush();
- }
- } catch (IOException e) {
- throw new RuntimeException("读写失败!");
- } finally {
- // 关闭了缓冲区,就是关闭了缓冲区中的流对象,因为是缓冲区在读取数据
- try {
- if (bw != null)
- bw.close();
- } catch (IOException e) {
- throw new RuntimeException("关闭失败!");
- }
- }
- }
- }<strong>
- </strong>
复制代码
5、利用缓冲区读文件
- package com.itheima.io;
- import java.io.BufferedReader;
- import java.io.FileReader;
- import java.io.IOException;
- public class BufferedReaderDemo_2_2 {
- /**
- * 字符读取流缓冲区
- * 改缓冲区提供了一个一次读一行的方法readline(),方便于对文本数据的获取
- *
- */
- public static void main(String[] args) {
- // 创建读取流对象和文件关联
- FileReader fr = null;
- BufferedReader br = null;
- try {
- fr = new FileReader(".\\testData\\buf.txt");
- // 用缓冲区读取提高效率
- br = new BufferedReader(fr);
- String line="";
- while((line=br.readLine())!=null){
- System.out.println(line);
- }
- } catch (IOException e) {
- throw new RuntimeException("读写失败!");
- } finally {
- try {
- if (br != null)
- br.close();
- } catch (IOException e) {
- throw new RuntimeException("关闭失败!");
- }
- }
- }
- }
复制代码
|