JAVA小白第八课学习心得------io流

——————----------------------------------------------------------------------------------------———————

前言:本次学习,学了io流,文件流。整体难度还是挺大,但是要静下心去学,应该还是没有什么问题;

一:文件流;(file类相对于io流简单不少,只需要了解几个比较常用的方法就可以了);‘

要注意的是在创建完file对象后,在括号里要添加上你要进行操作的文件的地址

1;获取文件名.getName方法,这个方法可以获取文件名;

2;判断文件是否存在.exists方法,返回T或F;可以用于判断文件是否存在,不存在在创建文件;

3;判断是否是文件.isDirectory方法,用于判断是否是文件,也是返回T或F;

4;创建文件夹,这里分两种情况,一种是.mkdir方法他是创建一个单级目录,另外一种是.mkdirs方法他是创建一个多级目录,需要区分;

二;io流(个人感觉io流比较抽象,也很容易搞混,需要注意的是io流要先搞清输入和输出的作用以及字符流,字节流的差别才更好理解;)

1:字符输出流;(用于读取一些文件里的数据比较合适),可以分为两类必将常用的

FileWriter:简单来说就是利用代码将数据写入文件之中;

1:先创建一个FileWriter对象,在括号里加上你要操作的文件地址;

因为,后续需要关闭操作,节省资源,并且需要一个try catch抛出错误:

FileWriter fileWriter=null;
try {
   //先创建一个字符流输出对象
     fileWriter=new FileWriter("D:\\JAVApro\\io\\2.txt");
     fileWriter.write("james");
     //这边需要对fileWriter进行一个刷新操作,这样才能打印出数据;

//     fileWriter.flush();需要注意的是如果加上了close就可以不用进行文件刷新就可以直接打印出数据;
} catch (IOException e) {
    e.printStackTrace();
}
//这里因为需要关闭操作,否则会一直占用文件资源;
finally {
    try {
        fileWriter.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

还有一种输入方法,除了需要输入你要的字符串,还要输入一个偏移量(就是从第几个字符开始读取值),最后输入一个你需要的长度;

fileWriter.write("asdfg",2,3);

这边还有一个更加高效的输出流叫做Bufferedwriter;它更高效,体现在有一个缓冲区,当数据满了时才会统一输出;

这边需要注意的是,在传入地址时,首先要传入一个writer对象才行,可以new FileWriter对象,再将路径传入进去就行;

方法与FileWriter方法差不多,多了一个换行的功能;

BufferedWriter writer=null;
 try {
     //因为这里需要传入的是一个Writer对象,因为FileWriter和BufferedWriter是同一种Writer类型;
      writer=new BufferedWriter(new FileWriter("D:\\JAVApro\\io\\2.txt"));
      writer.write("abcdef",3,3);
    //这里进行一个换行操作;
      writer.newLine();
      writer.write("zxcvb",2,2);
 } catch (IOException e) {
     e.printStackTrace();
 }finally {
     try {
         writer.close();
     } catch (IOException e) {
         e.printStackTrace();
     }

2,字符输入流;(通俗来说就是读取文件里的数据,通过代码来实现);

2.1FileReader;前面两个步骤与输出流一样,都是先创建一个对象,然后先赋空值,便于最后将系统关闭,这边读取时,要先设置一个为-1的变量(当数据为空时返回的是-1),用于当作循环条件,这里不设置变量的话,他在读取时会读取一个覆盖一个,无法实现效果;在打印出结果时,必须要进行一个强制转换,这样才能输出想要的字符要不然默认是ASCLL码;

FileReader reader = null;
try {
    //先创建一个字符流输入对象
    reader = new FileReader("D:\\JAVApro\\io\\2.txt");
   //这边使用一个int数组并赋初值-1;因为在没有数据时输出的是-1,这样就可以当作循环的条件
    int num=-1;//这边如果没有用一个变量来接受的话,他就会打印一个覆盖一个,达不到需要的效果;
    while ((num=reader.read())!=-1){
    //这边进行一个强制转换将ASCILL码转换为字符类型就可以输出想要的结果;
        System.out.println((char) num);
    }


    //     fileWriter.flush();需要注意的是如果加上了close就可以不用进行文件刷新就可以直接打印出数据;
} catch (IOException e) {
    e.printStackTrace();
}
//这里因为需要关闭操作,否则会一直占用文件资源;
finally {
    try {
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

这边还有一种利用循环读取字符数组的方法,需要注意的是最后得通过new String构造器将字符数组转换为字符串:

FileReader fileReader=null;
try {
     fileReader=new FileReader("D:\\JAVApro\\io\\2.txt");
//这边需要一个参数用于接收,才能起到不被覆盖的效果
    int num;
//设定一个数组,用于存放数据
    char[] c=new char[3];
//使用一个while循环,以不等于空数据为-1,作为循环退出的条件,将数组c放在read里读出
    while ((num=fileReader.read(c))!=-1){
//这边直接使用一个String构造器然后就可以输出你需要的数组效果,因为已经包含了.read方法就不要在使用
        System.out.println(new String(c,0,num));
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();

同样这边也有一个更为高效的方法BufferedReader,高效点在于可以整行读取数据;

这边需要注意的是,在传入地址时,首先要传入一个Reader对象才行,可以new FileReader对象,再将路径传入进去就行;

try {
    BufferedReader reader=new BufferedReader(new FileReader("D:\\JAVApro\\io\\2.txt"));
    //定义一个字符串来接受方法的变量
    String str=null;
//高效点在于就是能读取一整行的数据
    while ((str=reader.readLine())!=null){
        System.out.println(str);
    }

} catch (FileNotFoundException e) {
    e.printStackTrace();
}

二:字节流(用于一些音频,图片比较适合)与字符流最大的不同在于,前者通过字符数组实现

而后者是通过字节数组来实现功能;

1;高效输出流 :BufferedOutputStream

方法和前面的高效字符流的方法差不多;只是需要注意的是要传入的是字节数组;

2;高效输入流:BufferedInputStream

最后也是需要通过一个new String构造器将字节数组强制转换为字节串;

一个通过字节流复制文件的例子;

BufferedOutputStream bufferedOutputStream=null;
BufferedInputStream bufferedInputStream=null;
        try {//  //高效输出流
            bufferedOutputStream=new BufferedOutputStream
             //创建一个新的文件,将要复制的文件放到这个文件里
                    (new FileOutputStream("D:\\JAVApro\\io\\湖人总冠军\\3.txt"));
            //高效输入流
            bufferedInputStream=new BufferedInputStream
             //放要复制的文件
                    (new FileInputStream("D:\\JAVApro\\io\\湖人总冠军\\2.txt"));
           //创建一个字节型的数组,并在里面放入复制文件的字节大小,1kb=1024字节;
            byte[]  bytes=new byte[1024];
            int num=-1;
            //使用循环打出需要复制的数据
            while ((num=bufferedInputStream.read(bytes))!=-1){
//这边输出要复制的数据的格式
                bufferedOutputStream.write(bytes,0,num);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
           //进行一个判断,看输入和输出是否为空值,如果不为空值,证明已经被调用,可以关闭系统;
            if(bufferedInputStream!=null){
                bufferedInputStream.close();
                if (bufferedOutputStream!=null){
                    bufferedOutputStream.close();
                }
            }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值