IO流

java.io.File类:文件和路径名的抽象表示形式,与平台无关

File能新建、删除、重命名文件和文件夹,单file不能访问文件的内容,如果需要访问文件的内容,则要使用输入、输出流

file可以作为参数传递给流的构造函数

 

File的常用构造函数:

 

File的常用方法:

查看文件的属性:

 

 验证文件、文件夹是否存在:

获取文件、文件的信息

 

 与文件相关的操作

 

与目录相关的操作

 

 

java io的原理:

IO流用来处理设备之间的数据传输

在java程序中,对于数据的输入、输出操作以流的方式进行

java.io包下提供了各种的类和接口,以获取不同种类的数据,并通过标准的方法进行输入、输出操作

 

输入InputStream、Reader:读取外部的数据(磁盘、光盘等外部设备的数据)到程序(内存中)

输出OutputStream、Writer:将程序(内存)中的数据输出到磁盘、光盘等外部设备

 

流的分类::

按操作数据单位的不同分为:字节流(8个字节)、字符流(16个字节)

按数据的流向分为:输入流、输出流

按流的角色不同:节点流,处理流

 

 

 InputSteam和Reader是输入流的基类

InputStream

 1 public void fileInputStream() throws Exception {
 2 
 3         // 1.创建一个File类的对象。
 4         File file = new File("hello.txt");
 5 
 6         // 2.创建一个FileInputStream类的对象
 7         FileInputStream fis = new FileInputStream(file);
 8 
 9         // 3.调用FileInputStream的方法,实现file文件的读取。
10         /*
11          * read():读取文件的一个字节。当执行到文件结尾时,返回-1
12          */
13         // int b = fis.read();
14         // while(b != -1){
15         // System.out.print((char)b);
16         // b = fis.read();
17         // }
18 
19 
20         int b;
21         while ((b = fis.read()) != -1) {
22             System.out.print((char) b);
23         }
24 
25         // 4.关闭相应的流
26         fis.close();
27     }

 

public void  fileOutputStream() {
        // 1.创建一个File对象,表明要写入的文件位置。
        // 输出的物理文件可以不存在,当执行过程中,若不存在,会自动的创建。若存在,会将原有的文件覆盖
        File file = new File("hello2.txt");

        // 2.创建一个FileOutputStream的对象,将file的对象作为形参传递给FileOutputStream的构造器中
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(file);
            // 3.写入的操作
            fos.write(new String("I love China!").getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 4.关闭输出流
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
 1 public void copy() {
 2         // 1.提供读入、写出的文件
 3         File file1 = new File("");
 4         File file2 = new File("");
 5         // 2.提供相应的流
 6         FileInputStream fis = null;
 7         FileOutputStream fos = null;
 8         try {
 9             fis = new FileInputStream(file1);
10             fos = new FileOutputStream(file2);
11             // 3.实现文件的复制
12             byte[] b = new byte[20];
13             int len;
14             while ((len = fis.read(b)) != -1) {
15                 // fos.write(b);//错误的写法两种: fos.write(b,0,b.length);
16                 fos.write(b, 0, len);
17             }
18         } catch (Exception e) {
19             e.printStackTrace();
20         } finally {
21             if (fos != null) {
22                 try {
23                     fos.close();
24                 } catch (IOException e) {
25                     e.printStackTrace();
26                 }
27             }
28             if (fis != null) {
29                 try {
30                     fis.close();
31                 } catch (IOException e) {
32                     e.printStackTrace();
33                 }
34             }
35 
36         }
37     }

 

 

 

 

Reader

 

 1 public void fileReader(){
 2         FileReader fr = null;
 3         try {
 4             File file = new File("");
 5             fr = new FileReader(file);
 6             char[] c = new char[24];
 7             int len;
 8             while((len = fr.read(c)) != -1){
 9                 String str = new String(c, 0, len);
10                 System.out.print(str);
11             }
12         }catch (IOException e) {
13             // TODO Auto-generated catch block
14             e.printStackTrace();
15         }finally{
16             if(fr != null){
17                 try {
18                     fr.close();
19                 } catch (IOException e) {
20                     // TODO Auto-generated catch block
21                     e.printStackTrace();
22                 }
23             }
24         }
25         
26     }

 

 OutputStream

 

 

因为字符流直接以字符进行操作单位,所以Writer可以用字符串来替换字符数组,即以String作为参数

 

 1 public void  fileReaderWriter(){
 2         //1.输入流对应的文件src一定要存在,否则抛异常。输出流对应的文件dest可以不存在,执行过程中会自动创建
 3         FileReader fr = null;
 4         FileWriter fw = null;
 5         try{
 6             //不能实现非文本文件的复制
 7 //            File src = new File("");
 8 //            File dest = new File("");
 9             File src = new File("");
10             File dest = new File("");
11             //2.
12             fr = new FileReader(src);
13             fw = new FileWriter(dest);
14             //3.
15             char[] c = new char[24];
16             int len;
17             while((len = fr.read(c)) != -1){
18                 fw.write(c, 0, len);
19             }
20         }catch(Exception e){
21             e.printStackTrace();
22         }finally{
23             if(fw != null){
24                 try {
25                     fw.close();
26                 } catch (IOException e) {
27                     // TODO Auto-generated catch block
28                     e.printStackTrace();
29                 }
30             }
31             if(fr != null){
32                 try {
33                     fr.close();
34                 } catch (IOException e) {
35                     // TODO Auto-generated catch block
36                     e.printStackTrace();
37                 }
38             }
39         }
40     }

 

 1         /*
 2      * 实现字节流与字符流之间的转换:
 3      * 转换流:InputStreamReader  OutputStreamWriter
 4      * 编码:字符串  --->字节数组
 5      * 解码:字节数组--->字符串
 6      */
 7     @Test
 8     public void test1(){
 9         BufferedReader br = null;
10         BufferedWriter bw = null;
11         try {
12             //解码
13             File file = new File("dbcp.txt");
14             FileInputStream fis = new FileInputStream(file);
15             InputStreamReader isr = new InputStreamReader(fis, "GBK");
16             br = new BufferedReader(isr);
17             //编码
18             File file1 = new File("dbcp4.txt");
19             FileOutputStream fos = new FileOutputStream(file1);
20             OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK");
21             bw = new BufferedWriter(osw);
22             String str;
23             while((str = br.readLine()) != null){
24                 bw.write(str);
25                 bw.newLine();
26                 bw.flush();
27             }
28         }catch (IOException e) {
29             e.printStackTrace();
30         }finally{
31             if(bw != null){
32                 try {
33                     bw.close();
34                 } catch (IOException e) {
35                     e.printStackTrace();
36                 }
37                 
38             }
39             if(br != null){
40                 try {
41                     br.close();
42                 } catch (IOException e) {
43                     e.printStackTrace();
44                 }
45                 
46             }
47         }
48         
49     }        

常见的字符编码:

ASCII:美国标准的信息交换码,用一个字节的7位表示

ISO-8859-1:拉丁码表,欧洲码表,用一个字节的8位表示

GB2312:中国的中文编码表

GBK:中国的中文编码表

Unicode:国际标准码,融合了多种文字,所有文字都用两个字节来表示,java语言使用的就是这个编码

UTF-8:最多使用3个字节来表示一个字符

转换流的编码使用:

可以将字符按指定格式的编码进行存储

可以对字符按指定格式的编码进行解读,有构造函数完成

标准的输入、输出流:

System.in和System.out分别代表了系统的标准输入和输出设备

System.in的类型是InputStream,System.out的类型是PrintStream

通过System.setIn(), System.setOut()方法对默认设备进行更改

 1 public void demo(){
 2         BufferedReader br = null;
 3         try {
 4             InputStream is = System.in;
 5             InputStreamReader isr = new InputStreamReader(is);
 6             br = new BufferedReader(isr);
 7             String str;
 8             while(true){
 9                 System.out.println("请输入字符串:");
10                 str = br.readLine();
11                 if(str.equalsIgnoreCase("e") || str.equalsIgnoreCase("exit")){
12                     break;
13                 }
14                 String str1 = str.toUpperCase();
15                 System.out.println(str1);
16             }
17         } catch (IOException e) {
18             e.printStackTrace();
19         }finally{
20             if(br != null){
21                 try {
22                     br.close();
23                 } catch (IOException e) {
24                     // TODO Auto-generated catch block
25                     e.printStackTrace();
26                 }
27                 
28             }
29         }
30     }



 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/lzb0803/p/8954962.html