JDK源码分析之输入输出流 超~详细解析

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值