JDK源码分析之输入输出流 超~详细解析
来源:互联网 发布:买家如何避免淘宝客 编辑:程序博客网 时间:2024/06/07 00:57
package com.LQBZ.JDK.io;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;/** * 本程序能完成以下内容: * 1.一次建立目录,子目录,文件.(mkdirs&createNewFile) * 2.在文件中添加(覆盖,追加)可读内容. * @author 张友谅 * */public class ClassOutputStreamTest { private static FileOutputStream fileOut; private static FileOutputStream fileOut1; public static void main(String[] args) throws IOException { File file = new File("G:\\Users\\Administrator\\workspace\\test\\src\\com\\hello.java"); File file1= new File("D:\\123\\123\\123\\");// //对文件的操作关键是看FileOutputStream构造函数,第二个参数表示是否追加,默认false// fileOut = new FileOutputStream(file1,true);// //这样写就表示覆盖文件,比较危险.// fileOut1 = new FileOutputStream(file);// //文件写入是以ASCII码方式(byte字节)进行的,40对应的符号是"("// fileOut.write(40);// //递归建立目录和文件,判断条件是父目录是否存在,注意就算带上后缀,建立的也是文件夹// if(!(file1.getParentFile().exists())){// file1.mkdirs();// }// //下面两行配合上面三行才是建立文件的完整过程 File file2 = new File(file1, "123.txt");// file2.createNewFile();// //上面说到文件写入是以比特数组进行的,如果要写入一串字符串要怎么写呢?// String str = new String("悲鸣非身死,长戈断炊烟");// fileOut1 = new FileOutputStream(file2,false);// fileOut1.write(str.getBytes()); //如果想只将部分内容读到文件中,则可以这么用: String str = new String("悲鸣非身死,长戈断炊烟\n"); fileOut1 = new FileOutputStream(file2,false); for(int i = 0 ; i<5 ; i++) fileOut1.write(str.getBytes()); //输入输出流应该及时关闭,释放资源,养成良好的编码习惯. fileOut1.close(); }}
package com.LQBZ.JDK.io;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;/** * 本程序能完成以下内容: * 正确地读取文件中的内容 * @author 张友谅 */public class ClassInputStreamTest { private static int ch; private static byte []cup = new byte[1024]; //InputStream 输入流类,它上面直接继承自java.lang.Object类 //而它的子类有9个之多,可见其重要性. //IntpuStream 类是一个抽象类,所以以下的例子都配合它的子类使用 public static void main(String[] args) throws IOException { //已存在的文件: File file = new File("D:123\\123\\123\\123.txt"); //实例化文件输入流 InputStream inputStream = new FileInputStream(file);// //这里的编码格式是保证读取中文不乱码的关键// //PS:要跟目标文件的编码格式一样.// Reader reader = new InputStreamReader(inputStream,"GB2312");// //缓冲器:提高读取效率// BufferedReader bf = new BufferedReader(reader);// //如果在while中不写ch,输出的时候需要再一次调用bf.read()// //而这样输出的结果是每隔一个字符输出一个字符,这样显然是不对的// //因为每次调用bf.read()都会在输入流中读取一个字符// //当判断条件为-1时代表文件已经读完,程序结束 //这是用循环实现内容输出的方式// while((ch = bf.read())!=-1){// System.out.print((char)ch);// }// // //这是不用显式循环输出内容的方式.// //注意注意!!在文字的后面有一行很长的空格!// //原因是所有字符加起来也不够1024,所以用空格补全// //就好像用水杯装水,不管你装的多少,水杯就在那,你装太多,也只会溢出.// inputStream.read(cup);// System.out.println(new String(cup));// //所以可以这么写,利用read的返回值取得有效内容长度 int len = inputStream.read(cup, 0, cup.length); System.out.println(new String(cup,0,len)+"]"); //输入输出流应该及时关闭,释放资源,养成良好的编码习惯. inputStream.close();// reader.close();// bf.close(); }}/* * 总结: * 如果说File类是与文件打交道的第一步,即找到了文件 * 那么下一步很自然的就是对其进行更改 * 而文件的输入输出流无疑是实现这一步的重要手段 * * 输出(方法是write)就是从键盘到内存再到文件, * 输入(方法是read)就是从文件到内存再到屏幕. * * 输入输出其实是以内存和文件的关系来说的,内存做主体,从内存输出,向内存输入. * 内存写到文件,文件读入内存 * * 主体是内存! 主体是内存! 主体是内存! * 重要的事缩三遍! * * 怎么好记怎么记 * */
0 0
- JDK源码分析之输入输出流 超~详细解析
- JDK之java.io.File类 超~详细解析
- Rxjava2源码解析超详细~~~
- JFinal 源码超详细解析之DB+ActiveRecord
- JFinal 源码超详细解析之DB+ActiveRecord
- JFinal 源码超详细解析之DB+ActiveRecord
- 超详细Retrofit源码解析(一)
- 超详细Retrofit源码解析(二)
- JDK源码解析---ArrayList分析
- Android Universal Image Loader 源码分析-超详细,超全面
- 超详细在Ubuntu下安装JDK图文解析
- 超详细在Ubuntu下安装JDK图文解析
- 超详细在Ubuntu下安装JDK图文解析
- 超详细在Ubuntu下安装JDK图文解析
- 超详细在Ubuntu下安装JDK图文解析
- 超详细在Ubuntu下安装JDK图文解析
- 超详细在Ubuntu下安装JDK图文解析
- 超详细在Ubuntu下安装JDK图文解析
- ROS velodyne 连接点云并且显示
- C语言学习
- UVa-1368
- postgresql出现Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.
- stl中的upper_bound和lower_bound
- JDK源码分析之输入输出流 超~详细解析
- 多行文本超出时显示省略号----jquery.ellipsis.js
- struct usb_bus
- TortoiseGit 中文语言包检测不出来
- 命令模式
- C语言itoa()函数和atoi()函数详解---整数与字符互相转换C函数
- Android检测url地址是否可达
- LEAP环境如何使用和配置RestService
- 架构设计:负载均衡层设计方案(5)——LVS单节点安装