欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA学习--文件流FileInputStream和FileOutputStream操作

程序员文章站 2022-04-09 08:01:12
...

* 1.流的分类:
 * 按照数据流向的不同:输入流  输出流
 * 按照处理数据的单位的不同:字节流  字符流(处理的文本文件)
 * 按照角色的不同:节点流(直接作用于文件的)  处理流
 * 
 * 2.IO的体系
 * 抽象基类            节点流(文件流)                                缓冲流(处理流的一种)
 * InputStream        FileInputStream            BufferedInputStream
 * OutputStream        FileOutputStream        BufferedOutputStream
 * Reader            FileReader                BufferedReader
 * Writer            FileWriter                BufferedWriter

 

 

 1     // 从硬盘存在的一个文件中,读取其内容到程序中。使用FileInputStream
 2     // 要读取的文件一定要存在。否则抛FileNotFoundException
 3     @Test
 4     public void testFileInputStream1() throws Exception {
 5         // 1.创建一个File类的对象。
 6         File file = new File("hello.txt");
 7         // 2.创建一个FileInputStream类的对象
 8         FileInputStream fis = new FileInputStream(file);
 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         int b;
19         while ((b = fis.read()) != -1) {
20             System.out.print((char) b);
21         }
22         // 4.关闭相应的流
23         fis.close();
24     }

 

 

 1     // 使用try-catch的方式处理如下的异常更合理:保证流的关闭操作一定可以执行
 2     @Test
 3     public void testFileInputStream2() {
 4         // 2.创建一个FileInputStream类的对象
 5         FileInputStream fis = null;
 6         try {
 7             // 1.创建一个File类的对象。
 8             File file = new File("hello.txt");
 9             fis = new FileInputStream(file);
10             // 3.调用FileInputStream的方法,实现file文件的读取。
11             int b;
12             while ((b = fis.read()) != -1) {
13                 System.out.print((char) b);
14             }
15         } catch (IOException e) {
16             e.printStackTrace();
17         } finally {
18             // 4.关闭相应的流
19             if (fis != null) {
20                 try {
21                     fis.close();
22                 } catch (IOException e) {
23                     // TODO Auto-generated catch block
24                     e.printStackTrace();
25                 }
26             }
27         }
28     }

 

 

 1     @Test
 2     public void testFileInputStream3() { // abcdefgcde
 3         FileInputStream fis = null;
 4         try {
 5             File file = new File("hello.txt");
 6             fis = new FileInputStream(file);
 7             byte[] b = new byte[5];// 读取到的数据要写入的数组。
 8             int len;// 每次读入到byte中的字节的长度
 9             while ((len = fis.read(b)) != -1) {
10                 // for (int i = 0; i < len; i++) {
11                 // System.out.print((char) b[i]);
12                 // }
13                 String str = new String(b, 0, len);
14                 System.out.print(str);
15             }
16         } catch (IOException e) {
17             e.printStackTrace();
18         } finally {
19             if (fis != null) {
20                 try {
21                     fis.close();
22                 } catch (IOException e) {
23                     // TODO Auto-generated catch block
24                     e.printStackTrace();
25                 }
26 
27             }
28 
29         }
30     }

 

 

 1     // FileOutputStream
 2     @Test
 3     public void testFileOutputStream() {
 4         // 1.创建一个File对象,表明要写入的文件位置。
 5         // 输出的物理文件可以不存在,当执行过程中,若不存在,会自动的创建。若存在,会将原有的文件覆盖
 6         File file = new File("hello2.txt");
 7         // 2.创建一个FileOutputStream的对象,将file的对象作为形参传递给FileOutputStream的构造器中
 8         FileOutputStream fos = null;
 9         try {
10             fos = new FileOutputStream(file);
11             // 3.写入的操作
12             fos.write(new String("I love China!").getBytes());
13         } catch (Exception e) {
14             e.printStackTrace();
15         } finally {
16             // 4.关闭输出流
17             if (fos != null) {
18                 try {
19                     fos.close();
20                 } catch (IOException e) {
21                     // TODO Auto-generated catch block
22                     e.printStackTrace();
23                 }
24             }
25         }
26     }

 

 1     // 从硬盘读取一个文件,并写入到另一个位置。(相当于文件的复制)
 2     @Test
 3     public void testFileInputOutputStream() {
 4         // 1.提供读入、写出的文件
 5         File file1 = new File("C:\\Users\\shkstart\\Desktop\\1.jpg");
 6         File file2 = new File("C:\\Users\\shkstart\\Desktop\\2.jpg");
 7         // 2.提供相应的流
 8         FileInputStream fis = null;
 9         FileOutputStream fos = null;
10         try {
11             fis = new FileInputStream(file1);
12             fos = new FileOutputStream(file2);
13             // 3.实现文件的复制
14             byte[] b = new byte[20];
15             int len;
16             while ((len = fis.read(b)) != -1) {
17                 // fos.write(b);//错误的写法两种: fos.write(b,0,b.length);
18                 fos.write(b, 0, len);
19             }
20         } catch (Exception e) {
21             e.printStackTrace();
22         } finally {
23             if (fos != null) {
24                 try {
25                     fos.close();
26                 } catch (IOException e) {
27                     e.printStackTrace();
28                 }
29             }
30             if (fis != null) {
31                 try {
32                     fis.close();
33                 } catch (IOException e) {
34                     e.printStackTrace();
35                 }
36             }
37 
38         }
39     }

 

 

 1     // 实现文件复制的方法
 2     public void copyFile(String src, String dest) {
 3         // 1.提供读入、写出的文件
 4         File file1 = new File(src);
 5         File file2 = new File(dest);
 6         // 2.提供相应的流
 7         FileInputStream fis = null;
 8         FileOutputStream fos = null;
 9         try {
10             fis = new FileInputStream(file1);
11             fos = new FileOutputStream(file2);
12             // 3.实现文件的复制
13             byte[] b = new byte[1024];
14             int len;
15             while ((len = fis.read(b)) != -1) {
16                 // fos.write(b);//错误的写法两种: fos.write(b,0,b.length);
17                 fos.write(b, 0, len);
18             }
19         } catch (Exception e) {
20             e.printStackTrace();
21         } finally {
22             if (fos != null) {
23                 try {
24                     fos.close();
25                 } catch (IOException e) {
26                     e.printStackTrace();
27                 }
28             }
29             if (fis != null) {
30                 try {
31                     fis.close();
32                 } catch (IOException e) {
33                     e.printStackTrace();
34                 }
35             }
36 
37         }
38     }

 

 

 1     @Test
 2     public void testCopyFile(){
 3         long start = System.currentTimeMillis();
 4 //        String src = "C:\\Users\\shkstart\\Desktop\\1.avi";
 5 //        String dest = "C:\\Users\\shkstart\\Desktop\\2.avi";
 6         String src = "dbcp.txt";
 7         String dest = "dbcp2.txt";
 8         copyFile(src,dest);
 9         long end = System.currentTimeMillis();
10         System.out.println("花费的时间为:" + (end - start));//3198
11     }

 

相关标签: io流