JAVA FILE or I/O学习 - I/O流操作:FileInputStream、FileOutputStream、ObjectInputStream、ObjectOutputStream、InputStreamReader、OutputStreamWriter等
1 public class IOStreamKnow 2 { 3 /*********************************文件读写方式:字节流************************************/ 4 /** 5 * 方式一:基本方式,文件读写方式的基础 6 */ 7 public void name() 8 { 9 try 10 { 11 //创建输入流,输入流用来读取文件字节信息 12 //参数表示读取的文件对象 13 FileInputStream input = new FileInputStream(new File("d:/a")); 14 //创建输入流,将信息进行输出 15 //参数表示输出的文件目标 16 FileOutputStream output = new FileOutputStream(new File("e:/a")); 17 //读取输入流中的信息 18 //读取的字节 19 int data; 20 21 while((data = input.read()) != -1) 22 { 23 //将读取的信息通过输出流完成输出 24 output.write(data); 25 } 26 //清空输出流 27 output.flush(); 28 //关闭输出流 29 output.close(); 30 //关闭输入流 31 input.close(); 32 33 } catch (FileNotFoundException e) 34 { 35 e.printStackTrace(); 36 } catch (IOException e) 37 { 38 e.printStackTrace(); 39 } 40 } 41 /** 42 * 文件读写缓冲流:推荐方式一 43 * 该种方式需要依据FileInputStream为基础 44 */ 45 public void name1() 46 { 47 try 48 { 49 //缓冲字节流依赖于字节流来构建 50 BufferedInputStream buffInput = new BufferedInputStream(new FileInputStream(new File("d:/back.jpg"))); 51 //缓冲输出流 52 BufferedOutputStream buffOutput = new BufferedOutputStream(new FileOutputStream(new File("e:/back.jpg"))); 53 int data; 54 while((data = buffInput.read()) != -1) 55 { 56 buffOutput.write(data); 57 } 58 buffOutput.flush(); 59 buffOutput.close(); 60 buffInput.close(); 61 } catch (FileNotFoundException e) 62 { 63 e.printStackTrace(); 64 } catch (IOException e) 65 { 66 e.printStackTrace(); 67 } 68 } 69 /** 70 * 文件读写缓冲流:推荐方式二:常用方式 71 * 该种方式需要依据FileInputStream为基础,并且可以自行定制读写的量 72 */ 73 public void name2() 74 { 75 try 76 { 77 FileInputStream input = new FileInputStream(new File("d:/back.jpg")); 78 FileOutputStream output = new FileOutputStream(new File("e:/back.jpg")); 79 //缓冲字节数组 80 byte[] buffer = new byte[1024]; 81 //将输入流读取的文件信息读入到缓冲区中,返回读取的长度 82 int len; 83 while((len = input.read(buffer)) != -1) 84 { 85 86 output.write(buffer,0,len); 87 } 88 output.flush(); 89 output.close(); 90 input.close(); 91 } catch (FileNotFoundException e) 92 { 93 e.printStackTrace(); 94 } catch (IOException e) 95 { 96 e.printStackTrace(); 97 } 98 } 99 /** 100 * 特定文件读取方式:按照指定的数据源类型,进行读取 101 */ 102 public void name3() 103 { 104 //data可以在读写的时候按照特定的java格式进行数据的读写 105 try 106 { 107 DataInputStream input = new DataInputStream(new FileInputStream(new File("d:/back.jpg"))); 108 DataOutputStream output = new DataOutputStream(new FileOutputStream(new File("e:/back.jpg"))); 109 int data; 110 while((data = input.read()) != -1) 111 { 112 output.write(data); 113 } 114 output.flush(); 115 output.close(); 116 input.close(); 117 } catch (FileNotFoundException e) 118 { 119 e.printStackTrace(); 120 } catch (IOException e) 121 { 122 e.printStackTrace(); 123 } 124 } 125 /*********************************对象的存储、读入方式:序列化、反序列化************************************/ 126 /** 127 * 序列化写入(存储)对象数据 128 * 反序列化读取对象数据 129 */ 130 public void name4() 131 { 132 User user = new User(1001, "tom"); 133 134 //通过序列化保存数据 135 try 136 { 137 ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(new File("d:/temp.txt"))); 138 output.writeObject(user); 139 output.flush(); 140 output.close(); 141 142 } catch (FileNotFoundException e) 143 { 144 e.printStackTrace(); 145 } catch (IOException e) 146 { 147 e.printStackTrace(); 148 } 149 150 //通过反序列化对之前保存的数据进行对象的转换 151 try 152 { 153 ObjectInputStream input = new ObjectInputStream(new FileInputStream(new File("d:/temp.txt"))); 154 //读取文件中的对象 155 User user1 = (User)input.readObject(); 156 input.close(); 157 System.out.println(user1.getUserId()); 158 System.out.println(user1.getUserName()); 159 } catch (FileNotFoundException e) 160 { 161 e.printStackTrace(); 162 } catch (IOException e) 163 { 164 e.printStackTrace(); 165 } catch (ClassNotFoundException e) 166 { 167 e.printStackTrace(); 168 } 169 } 170 /*********************************文件读写方式:字符流,主要用于读取文本文件************************************/ 171 /** 172 * 方式二:由字节流衍生而来,字符流读写方式的基础 173 */ 174 public void name5() 175 { 176 //方式一:基本方式,文件读写方式的基础 177 try 178 { 179 //创建字符输入流,字符流的构建依赖于字节流,InputStreamReadder是字节流通向字符流的桥梁 180 //不能使用字符流读取使用字节描述的文件信息,如图片,音频文件,视频文件 181 InputStreamReader reader = new InputStreamReader(new FileInputStream(new File("d:/test.txt"))); 182 //创建字符输出流 183 OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File("e:/test.txt"))); 184 int data; 185 while((data = reader.read()) != -1) 186 { 187 writer.write(data); 188 //System.out.println(data); 189 } 190 writer.flush(); 191 writer.close(); 192 reader.close(); 193 194 } catch (FileNotFoundException e) 195 { 196 e.printStackTrace(); 197 } catch (IOException e) 198 { 199 e.printStackTrace(); 200 } 201 } 202 /** 203 * 字符缓冲流:由字符流读写方式的基础而来 204 */ 205 public void name6() 206 { 207 try 208 { 209 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("d:/集合项目.txt")))); 210 211 String str = ""; 212 //每次读取一行 213 while((str = reader.readLine()) != null) 214 { 215 System.out.println(str); 216 } 217 reader.close(); 218 } catch (FileNotFoundException e) 219 { 220 e.printStackTrace(); 221 } catch (IOException e) 222 { 223 e.printStackTrace(); 224 } 225 try 226 { 227 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("d:/my.txt")))); 228 writer.write("自定义文本"); 229 //换行 230 writer.newLine(); 231 writer.write("hello niit"); 232 writer.flush(); 233 writer.close(); 234 } catch (FileNotFoundException e) 235 { 236 e.printStackTrace(); 237 } catch (IOException e) 238 { 239 e.printStackTrace(); 240 } 241 } 242 }