黑马程序员技术交流社区
标题:
【Java基础学习】搬来了我的io学习笔记_字符流操作【上】
[打印本页]
作者:
胡天杭
时间:
2014-8-27 01:03
标题:
【Java基础学习】搬来了我的io学习笔记_字符流操作【上】
本帖最后由 胡天杭 于 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("关闭失败!");
}
}
}
}
复制代码
作者:
格子、
时间:
2014-8-27 07:08
楼主注意排版哈
作者:
胡天杭
时间:
2014-8-27 09:39
格子、 发表于 2014-8-27 07:08
楼主注意排版哈
求扫盲@.@
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2