史上最全的IO框架三(字符流)
来源:互联网 发布:中信证券软件下载 编辑:程序博客网 时间:2024/06/13 08:39
IO之字符流
课程大纲
一、 字符输出流
1、 public sbatract class Writer
2、 extends Object
3、 implements Appendable,Closeable,Flushable
4、 写入字符流的抽象类,子类必须实现的方法有writer(char[],int,int)、flush()和close()但是,多数子类将重写此处定义的一些方法,以提供更高的效率和或者其他的功能。
5、
6、 与OutputStream一样,对文件的操作使用:
FileWriter类完成此类的构造方法如下:
二、 字符输入流
1、 字符流的底层也是用字节流实现的
2、
三、 字节流与字符流的区别
1、 在所有的流操作里,字节永远是最基础的任何基于字节的操作都是正确的,无论你是文本文件还是二进制文件,
2、 如果确认文件里只有可打印的字符,包括英文和各个国家的文字,也包括中文。优先考虑用字符流。
3、 由于编码不同,多字节的字符占用多个字节,比如GBK的汉字就占用2个字节,而UTF-8的汉字就占用3个字节,如果一次读偶数个字节,那么采用UTF-8就可能出现剩余一个字节而导致部分乱码。
4、 所以,字符流是根据指定的编码,讲一个或者多个字节转化为Java里面的Unicode的字符。然后进行操作。
5、 字符操作一般使用Writer,Reader,等。字节操作一般都是InputStream,OutputStream以及各种包装类,比如:BufferedInputStream,BufferedOutputStream等
6、 总结:如果你确认要处理的文件时可打印的字符,那么使用字符流会简单一些,如果不确定使用字节流总是不会错的。
四、 作业
1、指定一个盘符下的文件,把该文件复制到指定的目录下。
字符输出流(写文件)
package com.itheima.filedemo;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
/**
* 字符输出流
* @author Administrator
*
*/
public class WriterDmeo {
public static void main(String[] args) { // TODO Auto-generated method stub //write1(); write2(); System.out.println("success");}/** * 字符输出流的方式一:一次性全部写入字符数组方式输出 */public static void write1(){ try { //构造一个文件对象 File file = new File("E:\\2.txt"); Writer out = new FileWriter(file, true); String info = "good good study,day day up"; //向文件中写入(转换成字符数组) out.write(info.toCharArray()); //out.write(info);//直接输出整个文件 //关闭 out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }}/** * 字符输出流的方式二:每次写入一个字符 */public static void write2(){ try { //构造一个文件对象 File file = new File("E:\\2.txt"); Writer out = new FileWriter(file, true); String info = "good good study,day day up"; char[] charArray = info.toCharArray(); for (char c : charArray) { out.write(c); } //关闭 out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }}
}
字符输入流(读取文件)
package com.itheima.filedemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
/**
* 字符输入流
* @author Administrator
*
*/
public class ReaderDemo {
public static void main(String[] args) { // TODO Auto-generated method stub //read1(); read2();}/** * 字符输入流方式一:每次读取指定大小的字符数组(开发中用的最多的就是这种,每次读取一个字符的用的不多) */public static void read1(){ try { //创建一个文本类对象 File f = new File("E:\\2.txt"); //创建一个字符输入流对象 Reader in = new FileReader(f); //每次读取20个字符(相当于装了20个字符的车) char[] cs = new char[20]; //每次读取的实际字符数量 int len = -1; //构造一个可追加容器 StringBuilder sb = new StringBuilder(); while ((len = in.read(cs)) != -1) { sb.append(cs, 0, len); } //关闭流 in.close(); //输出读取的内容 System.out.println(sb); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }}/** * 使用字节流读取文本文件(用作对比作用)有可能会产生乱码 */public static void read2(){ //创造一个文本类对象 File f = new File("E:\\2.txt"); try { InputStream in = new FileInputStream(f); byte[] bytes = new byte[20]; int len = -1; StringBuffer sb = new StringBuffer(); while ((len = in.read(bytes))!=-1) { sb.append(new String(bytes,0,len)); } in.close(); System.out.println(sb); System.out.println("-----------------------------"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }}
}
实现文件的复制
package com.itheima.filedemo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Homework1 {
public static void main(String[] args) { // TODO Auto-generated method stub String src = "D:\\1.txt"; String desc = "E:"; copyFile(src, desc); System.out.println("success");}/** * * @param src 源路径 比如:D:\\1.txt * @param desc目标路径 */public static void copyFile(String src,String desc){ //获取文件的名称 比如:1.txt String fileName = src.substring(src.lastIndexOf("\\")); //源文件 File srcFile = new File(src); //目标文件 File descFile = new File(desc + File.separator + fileName); try { //创建输入流对象 InputStream in = new FileInputStream(srcFile); //创建输入流对象 OutputStream out = new FileOutputStream(descFile); //定义每次要读取的字节数组 byte[] bytes = new byte[20]; //每次实际读取的大小 int len = -1; while ((len = in.read(bytes)) != -1) { //写入到目标文件文件 out.write(bytes, 0, len); } in.close(); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }}
}
- 史上最全的IO框架三(字符流)
- 史上最全IO框架十(字符串流:属于字符流)
- IO(三)字符流
- Java中,IO流(三):字符流的过滤器
- IO流(三)字符流
- 字符流---IO学习笔记(三)
- IO技术(三)字符流和字符缓冲区
- IO流(9)--字符流的三种拷贝
- java io 学习之三 字符流的缓冲区
- Java基础---IO流三(字节流& 字符流)
- IO流(三):字符流及其缓冲流
- JAVA 的IO操作(三) 字符输出流和输入流:Writer和Reader
- Java IO流系列(三)—— 字符流的缓冲区
- java Io流学习(三)字符流
- java中的io——字符流(三)
- Java IO知识点总结三(字符流)
- IO流(三)之IO包其他功能流及字符编码详解
- Java中的IO框架流三
- 【NOIP2012】洛谷1081 开车旅行
- Spring定时器--时间设置规则
- Curl添加open ssl 实现https连接
- java基础总结_02
- MongoDB新的Java驱动的学习
- 史上最全的IO框架三(字符流)
- SQLServer 时间格式化
- 拓扑排序(Topological Order 基础篇)—— 确定比赛名次 (HDU 1285 )
- nutch 安装部署 以nutch2.3.1 为例
- 单台服务器百万并发长连接支持
- Java 绝对路径与相对路径,项目路径和ClassPath路径实战
- java读取配置文件的几种方法
- UVA 10340-ALL in ALL
- ios仿网易新闻客户端