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
原创粉丝点击