java IO流

  1 package com.service.impl;
  2 import java.awt.image.BufferedImage;
  3 import java.io.BufferedInputStream;
  4 import java.io.BufferedOutputStream;
  5 import java.io.File;
  6 import java.io.FileInputStream;
  7 import java.io.FileNotFoundException;
  8 import java.io.FileOutputStream;
  9 import java.io.FileReader;
 10 import java.io.FileWriter;
 11 import java.io.IOException;
 12 
 13 public class JavaIo {
 14     public static void main(String[] args) throws IOException {
 15         File file= new File("D:/test/a1.txt");
 16         System.out.println(file.exists());
 17         try {
 18             file.createNewFile();
 19             System.out.println(file.exists());
 20             System.out.println(file.getName());//获取文件的名字
 21             System.out.println(file.getAbsolutePath());//获取文件的绝对路径
 22             System.out.println(file.getPath());//获取文件的相对路径
 23             System.out.println(file.getParent());//获取文件的父路径
 24             System.out.println(file.canRead());//文件是否可读
 25             System.out.println(file.canWrite());//文件是否可写
 26             System.out.println(file.length());//文件的长度
 27             System.out.println(file.lastModified());//文件最后一次修改的时间
 28             System.out.println(file.isDirectory());//判断文件是否是一个目录
 29             System.out.println(file.isHidden());//文件是否隐藏
 30             System.out.println(file.isFile());//判断文件是否存在
 31         } catch (IOException e) {
 32             // TODO Auto-generated catch block
 33             e.printStackTrace();
 34         }
 35         
 36         
 37         //list()获取某个目录下所有的文件或者文件夹:
 38         
 39         File file=new File("D:/");//指定文件目录
 40                 String[] str=file.list();//获取指定目录下的所有文件或者文件夹的名称数组
 41                  for(String s : str){//加强for循环遍历输出
 42                      System.out.println(s);
 43                 }
 44                  
 45                  
 46                  
 47          File file=new File("D:/");//指定文件路径
 48                 File[] f=file.listFiles();//获取指定目录下的所有文件或者文件夹的File数组
 49                for(File fi : f){//加强for循环遍历输出
 50                    System.out.println(fi);
 51                }
 52         
 53             //获取test目录下的JPG格式文件,不包含及子文件夹
 54             File file = new File("D:\test");
 55             String[] a = file.list();
 56             for(String s:a) {
 57                 if(s.endsWith(".JPG")) {
 58                     System.out.println(s);
 59                 }
 60             }
 61         
 62         //获取test目录下一级目录JPG格式的文件,并输出路径及文件名
 63         File file = new File("D:/test");
 64         File[] b = file.listFiles();
 65         for(File f:b) {
 66             if(f.isDirectory()) {
 67                 String[] s = f.list();
 68                 for(String c:s) {
 69                     if(c.endsWith(".JPG")) {
 70                         System.out.println(f+"****"+c);
 71                     }
 72                 }
 73             }
 74         }
 75         
 76         //FileInputStream和FileOutputStream进行拷贝文本或者图片或者歌曲
 77         
 78             FileInputStream fis = new FileInputStream("D:/test/a1.txt");
 79             FileOutputStream fos = new FileOutputStream("D:/test/test1/sss.txt", true);
 80             int a;
 81             while((a=fis.read())!=-1) {
 82                 fos.write(a);
 83             }
 84             fis.close();
 85             fos.close();
 86         
 87         
 88         /** A:缓冲思想
 89           * 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,
 90           * 这是加入了数组这样的缓冲区效果,java本身在设计的时候,
 91           * 也考虑到了这样的设计思想,所以提供了字节缓冲区流
 92         * B.BufferedInputStream
 93           * BufferedInputStream内置了一个缓冲区(数组)
 94           * 从BufferedInputStream中读取一个字节时
 95           * BufferedInputStream会一次性从文件中读取8192个, 存在缓冲区中, 返回给程序一个
 96           * 程序再次读取时, 就不用找文件了, 直接从缓冲区中获取
 97           * 直到缓冲区中所有的都被使用过, 才重新从文件中读取8192个
 98         * C.BufferedOutputStream
 99           * BufferedOutputStream也内置了一个缓冲区(数组)
100           * 程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中
101           * 直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里*/
102         
103         
104         //FileInputStream和FileOutputStream定义小数组进行读写操作
105         
106         FileInputStream fis = new FileInputStream("D:/test/a1.txt");
107         FileOutputStream fos = new FileOutputStream("D:/test/test1/nnn.txt",true);//true 表示可以继续往里写,不写true默认为覆盖nnn.txt文件
108         int a;
109         byte[] b = new byte[1024*8] ;
110         while((a=fis.read(b))!=-1) {
111             fos.write(b,0,a);
112         }
113         fis.close();
114         fos.close();
115         
116         
117         
118         
119         FileInputStream fis = new FileInputStream("D:/test/a1.txt");
120         FileOutputStream fos = new FileOutputStream("D:/test/test1/buffered.txt",true);
121         
122         BufferedInputStream bis = new BufferedInputStream(fis);
123         BufferedOutputStream bos = new BufferedOutputStream(fos);
124         int a;
125         while((a=bis.read())!=-1) {
126             bos.write(a);
127         }
128         
129         bis.close();
130         bos.close();
131         
132         
133         /*      面试题:小数组的读写和带Buffered的读取哪个更快?
134 
135                 * 定义小数组如果是8192个字节大小和Buffered比较的话
136                 * 定义小数组会略胜一筹,因为读和写操作的是同一个数组
137                 * 而Buffered操作的是两个数组
138                 IO流(flush和close方法的区别) 
139                 flush()方法: 用来刷新缓冲区的,刷新后可以再次写出(字节缓冲流内置缓冲区,如果没有读取出来,可以使用flush()刷新来)
140                 close()方法:用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出
141                 8:字符流FileReader和FileWriter
142                 字符流是什么
143                   * 字符流是可以直接读写字符的IO流
144                   * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出.    
145                 IO流(什么情况下使用字符流)
146                 * 字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写出时还要把字符转回字节.
147                 * 程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流
148                 * 读取的时候是按照字符的大小读取的,不会出现半个中文
149                 * 写出的时候可以直接将字符串写出,不用转换为字节数组
150                  
151                 IO流(字符流是否可以拷贝非纯文本的文件)
152                 * 不可以拷贝非纯文本的文件
153                 * 因为在读的时候会将字节转换为字符,在转换过程中,可能找不到对应的字符,就会用?代替,写出的时候会将字符转换成字节写出去
154                 * 如果是?,直接写出,这样写出之后的文件就乱了,看不了了*/
155         
156         
157         
158         
159         //字符流的拷贝,容易出现乱码
160                  FileReader fr2 = new FileReader("D:/test/a1.txt");
161                  FileWriter fw2 = new FileWriter("D:/test/test1/FileWriter.txt");
162                  
163                  int ch;
164                  while((ch = fr2.read()) != -1) {
165                     fw2.write(ch);
166                 }
167          
168                  fr2.close();
169                  fw2.close();
170                  
171                  
172                  FileReader fr2 = new FileReader("D:/test/a1.txt");
173                  FileWriter fw2 = new FileWriter("D:/test/test1/FileWriter.txt");
174                  BufferedReader br = new BufferedReader(fr2);
175                  BufferedWriter bw = new BufferedWriter(fw2);
176                  
177                  int ch;
178                  while((ch = br.read()) != -1) {
179                      bw.write(ch);
180                 }
181          
182                  br.close();
183                  bw.close();        
184         
185     }
186 
187 }
原文地址:https://www.cnblogs.com/tianxuwei/p/10478673.html