IO 常用API及基础总结

IO 常用API及基础总结

File类

#File 并不是指文件本身
两个常量:
路径分隔符File.pathSeparator
名称分隔符File.separator

//路径表示的几种形式
//1、windows下
String path = "C:\\Users\\dell\\Desktop";
//2、
path = "C:"+File.separator+"Users"+File.separator+"dell"+File.separator+"Desktop";
//3、推荐方式
path = "C:/Users/dell/Desktop";
  • IO流基础

一、概念

流动、流向
以程序为中心

二、IO流分类

1、流向:
    输入流与输出流

输入流 进内存
输出流 出内存

2、数据
    字节流:二进制        可以一切文件     包括纯文本 、doc 、音频 、视频等等
    字符流:文本文件        只能处理纯文本
3、功能
    节点:包裹源头
    处理:增强功能,提供性能(提高效率)

三、字符流与字节流(重点)

1、字节流
    输入流:InputStream
    输出流:OutputStream
2、字符流
(读入  写出)
    输入流:Reader
    输出流:Writer

四、操作

1、与文件建立联系
2、选择流
3、操作
4、释放资源

###FileWriter写数据###
    输出流写数据的步骤:
    A、创建输出流对象
    B、调用输出流对象的写数据方法 并刷新缓冲区    (硬盘存储数据的基本单位是字节)
    C、释放资源    (close()方法先刷新 再通知系统释放资源)

换行:\n        \r         \r\n
* windows识别的换行为 \r\n
* Linux识别的换行为 \n
* mac识别的换行为 \r

###FileReader读数据###
    同 FileWriter写数据

    代码实例:
    *    int len;
    *    char[] chs = new char[1024];
    *    while ((len=fr.read(chs))!=-1) {
    *        System.out.print((new String(chs,0,len)));
    *    }
    *    fr.close();

    *注意 char[] chs = new char[1024];    //写1024及其整数倍

    *往控制台输出时,不要ln 
     System.out.print();

###文件复制###
    数据源:
    目的地:
    *判断读            //先读
     然后写进去     //后写

###字符缓冲流###    (高效地读入和写出) 
    BufferedWriter bf = new BufferedWriter(new FileWriter("bf.txt"));
    BufferedReader br = new BufferedReader(new FileReader("bf.txt"));
    //注意构造方法里面

    System.out.print(new String(csh,0,len));
    //

    缓冲流的特殊功能:
        newLine()    //写一个换行符    这个换行符由系统决定
        readLine()    //读一行    【不包括换行符】    

五、IO 常用API 的测试

文件操作

File:文件和目录路径名的抽象表示形式,File类的实例是不可变的(即File可以创建实例)

##创建功能
createNewFile()
mkdir()
mkdirs()
##删除功能

##判断功能

字节流

字节缓冲流

对象流

转换流 (OutputStreamWriter 、 InputStreamReader)

可以指定字符集
*实例化转化流,必须先实例化一个字节流*

测试转换流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Test
public void testOut() throws IOException {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("osw.txt"), "UTF-8");
osw.write("测试写字符,指定字符集为UTF-8");
osw.close();
}
@Test
public void testIn() throws IOException {
InputStreamReader isr = new InputStreamReader(new FileInputStream("osw.txt"),"UTF-8");
char[] buf = new char[1024];
isr.read(buf);
System.out.println(new String(buf));
isr.close();
}

缓冲字符流

BufferedWriter
BufferedReader

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Test
public void testOut() throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
bw.write("测试字符缓冲流");
bw.flush();
bw.close();
}
@Test
public void testIn() throws IOException {
BufferedReader br = new BufferedReader(new FileReader("bw.txt"));
//br.readLine() 读一行,读到最后时返回null
String line = "";
while ((line=br.readLine())!=null) {
System.out.println(line);
}
br.close();
}

打印流 PrintWriter字符打印流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 测试打印流
* @throws FileNotFoundException
*/
@Test
public void testPrint() throws FileNotFoundException {
PrintWriter pw = new PrintWriter("pw.txt");
pw.print("测试字符打印流");
pw.close();
}
@Test
public void testPrintStream() throws FileNotFoundException {
PrintStream ps = new PrintStream("ps.txt");
ps.print("测试字节打印流");
ps.close();
}

六、注意

1、字符流的底层,依然是字节流
2、File 类只是用来表示目录和文件的相关信息,不对文件内容进行访问
new File(“”); //仅仅是创建一个内存对象
3、int read() ; 读取一个字节/(字符)内容,返回将该字节内容存到int类型的低8/(16)位
4、操作文件即为节点流
5、包装流

# Java

评论