1 package cn.jason.ios.streams;
2
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.IOException;
11
12 /**
13 * 测试IO流 *
14 * 读取指定文件的信息
15 * @author 小风微灵
16 *
17 */
18 public class MyStream {
19
20 /**
21 * 字节流读取信息到控制台
22 * @param filePath 文件地址
23 * @throws IOException 抛出的异常
24 */
25 private static void getFileInfos_ZJ(String filePath) throws IOException{
26
27 //创建对象
28 File file=new File(filePath);
29
30 //FileInputStream 输入流
31 FileInputStream fis=new FileInputStream(file);
32
33 //需要一个缓冲器
34 byte[] bs=new byte[1024*1024];
35
36 //记录读取长度
37 int length=fis.read(bs);
38
39 //[3]读取数据(开水管洗澡)
40 String content=new String(bs,0,length);
41
42 System.out.println("【缓冲】读取的内容:"+content);
43
44 //[4]关闭资源(关闭水龙头)
45 fis.close();
46 }
47
48 /**
49 * 字符流读取信息到控制台
50 * @param filePath
51 * @throws IOException
52 */
53 private static void getFileInfos_ZF(String filePath) throws IOException{
54 //创建对象
55 File file=new File(filePath);
56
57 //字符流
58 FileReader fr=new FileReader(file);
59
60 //开始读取数据
61 int content=0;
62 while ((content=fr.read())!=-1) {
63 System.err.print((char)content);
64 }
65 fr.close();
66 }
67
68 /**
69 * 缓冲字符流读取信息到控制台
70 * read
71 * public int read(char[] cbuf,
72 * int offset,
73 * int length)
74 * throws IOException将字符读入数组中的某一部分。
75 *
76 * 指定者:
77 * 类 Reader 中的 read
78 * 参数:
79 * cbuf - 目标缓冲区
80 * offset - 从其处开始存储字符的偏移量
81 * length - 要读取的最大字符数
82 * 返回:
83 * 读取的字符数,如果已到达流的末尾,则返回 -1
84 * 抛出:
85 * IOException - 如果发生 I/O 错误
86 *
87 * @throws IOException
88 */
89 private static void getFileInfos_ZF_HC(String filePath)throws IOException{
90 //读取
91 File file=new File(filePath);
92 FileInputStream fis=new FileInputStream(file);
93 BufferedInputStream bis=new BufferedInputStream(fis);
94 //工具
95 int length=0;
96 byte[] b=new byte[1024];
97 StringBuilder infos=new StringBuilder();
98 //输出
99 while((length=bis.read(b))!=-1){
100 String str=new String(b,0,length);
101 infos.append(str);
102 }
103 System.out.println(infos.toString());
104
105 //关闭资源
106 bis.close();
107 fis.close();
108 }
109
110 /**
111 *拷贝一个文件的内容到另外一个文件中
112 * @param srcFilePath 源文件地址
113 * @param desFilePath 目标文件地址
114 * @throws IOException
115 */
116 private static void sFile_To_OtherFile(String srcFilePath,String desFilePath)
117 throws IOException{
118 //读取文件
119 File fin=new File(srcFilePath);
120 FileInputStream fis=new FileInputStream(fin);
121 BufferedInputStream bis=new BufferedInputStream(fis);
122
123 //写入文件
124 File fout=new File(desFilePath);
125 FileOutputStream fos=new FileOutputStream(fout,true);//追加信息,而不是覆盖
126 BufferedOutputStream bos=new BufferedOutputStream(fos);
127
128 //工具准备
129 //缓冲写法1【测试通过】
130 // byte[] b=new byte[1024];
131 // int length=0;
132 // while((length=bis.read(b))!=-1){
133 // bos.write(b, 0, length);
134 // }
135 //缓冲写法2【测试通过】
136 int length=0;
137 while((length=bis.read())!=-1){
138 bos.write(length);
139 }
140 //关闭资源
141 bos.close();
142 fos.close();
143 bis.close();
144 fis.close();
145 }
146
147 /**
148 * 程序入口
149 * @param params 启动参数
150 * @throws IOException IO流异常抛出
151 */
152 public static void main(String[] params) throws IOException {
153 getFileInfos_ZF_HC("F:\\FileDemos\\2.txt");
154 sFile_To_OtherFile("F:\\FileDemos\\2.txt","F:\\FileDemos\\test.txt");
155 }
156 }