文章标题

import  java .lo.File

/*
IO流  向右反斜杠在Java中是作为转义序列的开始
转义序列后面跟上3个数表示八进制转义
问:\123  为什么不用\1而是用\123呢
答:编译器有着贪婪的原则,

file类既可以表示一个文件,也可以表示一个路径(文件夹)
当我们创建File类型的对象时,在硬盘上不会生成任何的信息
如果要下硬盘上生成相应的文件时,我们需要调用createNewFile方法。
  使用createNewFile创建文件时,文件所在的路径必须存在,
  否则,会产生IOException异常。

 createNewFile()会抛出IOException受检异常,当调用了一个可能会抛受检异常的方法时
 相当于调用者可能会发生受检异常 那就需要处理可以用两种方式
 第一种是把他交个上一级用throws声明,抛到虚拟机时,虚拟机不会处理             
 会把栈信息打印出来,没有实际意义,第二种用try-catch捕huo

 问:如果把file.createNewFile()注释掉会有什么问题
 答:如果try块中不产生任何异常,catch却来捕获这个异常,
 如果是运行时异常不会有什么问题,如果是受检异常,
 就不可以(除了Exception)

*/
public  calss FileTest{
    public static void main(String[] args){
        File file = new File("c:/12345.txt");

        try{
            //创建新的文件
            file.createNewFile();       
           }catch( IOException e ){    
             e.printStackTrace();        
           } 

           //返回文件的名字(12345.txt)
           System.out.println(file.getName());

           //File file = new File(12345.txt");
           //相对路径  返回路径 (包含文件)(12345.txt)
           System.out.println(file.getPath());

            //File file = new File("12345.txt");
            //绝对路径基于Java文件所在的路径
            //返回路径(包含文件)的名字<c:/12345.txt>
            System.out.println(file.getPath());

            //返回父路径信息
            System.out.println(file.getParent());

            //返回file文件对象所表示的文件(夹)是否存在,
            //存在返回true,否则返回false
            System.out.println(file.exist());

            //判断文件是否可写,可写返回true,否则返回false
            System.out.prinltn(file.canWrite());

            //判断文件是否可读,可读返回true,否则返回false
            System.out.println(file.canRead());

            //判断file对象所表示的是否是一个文件,是返回true,否则返回false
            System.out.println(file.isFile());

            //判断file对象所表示的是否是一个路径,是返回true,否则返回false,
            System.out.println(file.isDirectory());

            //返回文件最后一次修改的时间。(毫秒)
            System.out.println(file.lastModifile());
            //获得data时间,
            Date date = new Date(file.lastModifile());
            //对时间进行格式化
            DateFormat df = new SimpleDateFormat("yyyy/MM/dd/ HH:mm:ss");
            System.out.println(df.format(date));

            //返回文件的长度(以字节为单位)
            System.out.println(file.length());


            //删除file所表示的文件(夹).如果删除成功
            //返回true,否则返回false
            System.out.println(file.delete());

            File dir = new File("c:/abc");
            //创建file所表示的路径(文件夹),
            //如果成功返回true,否则返回false
            System.out.println(dir.madir());

            /*
                mkdir与mkdirs的区别
                mkdir在父路径不存在时,无法创建成功,返回false
                mkdirs在父路径不存在时,
                也能创建成功,会连同父路径一同创建
            */

            //返回file所表示的路径(文件夹),
            //如果成功返回true,否则返回fals
            System.out.println(dir.mkdirs());

            File dir =new File("c:");
            //返回一个String[],包含当前路径下所有文件和子路径的名字
            String[] names = dir.list();
            for(String name : names){
                System.out.println(name);
            }

            /*
                如果只想要文件或者路径的名字就用String
                如果知道以上还不够,还想知道文件的大小等
                就用file
            */

            //返回一个File[] ,包含当前路径下所有文件和子路径的名字
            File[] files = dir.listFiles();
            for(File f : files){
                System.out.println(f.getName());
            }
    }
}

/*流是一组有顺序的,有起点和终点的数据
Java程序的输入输出功能是通过流(Stream)来实现的
在Java中有关流的操作类存放在Java.io包中


我们是以当前的程序作为参照物,如果要读取数据的时候,
就是把数据源里的数据移动到当前程序中去,这就是《读取》
这个时候数据源里的数据要流向当前的程序,
就是输入流,因此输入流就是读取数据的

当前程序的数据移动到数据源中就是《写入》,
这时数据从当前程序流入到数据源中,这就是输出流
因此输出流就是写入数据的

流的分类
流按照处理数据的单位可以分为两种
1.字节流(8位)
2.字符流(16位)

二进制文件的基本存储单位是字节
文本文件的基本存储单位是字符

字节流和字符流
1.字节流用于处理字节的输入和输出,例如使用字节流读取或则写入
二进制数据
2.字符流为字符输入和输出提供了方便,在某些场合,
字符流比字节流更高效
3.字节流的父类是InputStream和OutputStream
  字符流的父类是Reader 和 Writer

  IntputStream类提供了相应的方法用来给数据源进行读取

  问:读取的是一个字节,为什么返回的是int类型的
  答:因为读取的时候这个字节是无符号的,也就是说返回值是0-255
  byte类型的范围是-128到127且有符号 无符号的最大值会超过有符号
  所以用int类型表示

*/

public class InputStreamTest
{
    public static void main(String[] args){
        System.out.println("Hello World");

        /*
            InputStream是抽象类不能创建对象,使用它的子类
            FileInputStream,  创建FileInputStream的时候会抛出
            受检异常FileNotFoundException,(当读取文件时不确定文件存在不存在,
            如果不存在就会产生异常) 这是就需要对它进行捕获处理
        */
        try{
            //使用InputStream读取文件时,文件必须存在,否则会产生异常
            InputStream input = new FielInputStream("D:/User/123.java");

            //返回剩余可读的字节数
            System.out.println(input.available());

            //读取一个字节,返回所读取的字节,如果到了文件末尾,返回-1
            int data 
            while( (data = input.read()) != -1){
                System.out.println( (char)data );//把读取的字节转换成字符
            }

            byte[] data = new byte[10];
            /*将读取的字节存放在字节数组当中,尽可能去填满字节数组
            返回实际所读取的字节数,如果没有字节可读,返回-1
            问:为什么返回-1
            答:读取的字节是无符号的,其不能取到负数,所以用-1来表示
            */
            int length ;
            while( (length = input.read(data)) != -1 ){
                for(int i = 0;i <length;i++){
                    System.out.println((char) data[i]);
                }
            }

            /*将读取的数组放入字节数组中以第二个参数开始,
            第三个参数长度的区间中,尽可能填满整个区间,
                返回实际所读取的字节数
                */
            while( (length = input.read(data)) != -1 ){
                for(int i = 2; i < length+2;i++){
                    System.out.println((char)data[i]);
                }
            }

            /* 如果读取中文的时候,中文会乱码,因为一次只读取一个字节
                而现在用的编码是UTF-8编码,在其中汉字是占用3个字节,
                英文只占用一个字节,

            */

            //用
            while((length = input.read(data)) != -1){
                //使用byte数组的数据来构建String
                System.out.println(new String(data , 0 , length);
            }

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


/*资源的释放
 try  - with - resources
  try(资源){

  }catch(){

  }finally{

  }
    在try的小括号中可以声明资源,
    资源在try语句块执行完毕后可以得到自动的释放

    什么可以成为try()中的资源?
    资源必须是AutoCloseable的子类型,因为这个借口里面有一个方法
    这个是释放资源所调用的方法,是 void close() throws Exception
    自动释放必须有释放的标准,实现了这个接口或者作为这个接口的子类型
    一定会有这个close()方法


*/
public class Release
{
    public static void main(String[] args){

        InputStream input = null;
        try {
            input = new FileInputStream("D:/eclipse/workspace/test/src/day16/HelloWorld.java");
            input.read();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }   
        }
    }


    public void tryWithResource() {
        // input流在try语句块执行完毕后,可以得到自动的释放。
        try (InputStream input = new FileInputStream("D:/eclipse/workspace/test/src/day16/HelloWorld.java");) {
            input.read();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

/*OutputStream类
1.void write (int b )往流中写一个字节b
2.void write( byte b[])往流中写一个字节数组b
3.void write( byte b[] ,int off,int len)把字节数组b中
从下标off开始,长度为len的字节写入流中
4.flush()刷新输出类,并输出所有被缓存的字节,由于某些流
支持缓存工能,该方法将把缓存中所有内容强制输出到流中
5.close() 流操作完毕后必须关闭
*/

//对于输入流,如果要读取的文件不存在,就会产生FileNotFoundException异常
//对于输出流,如果要写入的文件不存在,但是文件的父路径存在,则该文件会自动创建(不会产生异常)
//如果文件不存在,文件所在路径也不存在,就会产生FileNotFoundEXception异常

public class OutputStream
{
    public static void main(String[] args){
        try(OutputStream out = new FileOutputStream("c:/1234.txt")){
            /*  问:既然可以自动创建文件,FileNotFoundException还捕获干什么
                答:如果文件所在的路径不存在,就会产生异常

            */

            //写入一个字节
            out.write(65);

            //写入一个字节数组
            byte[] b = new byte[]{65,66,67,68};
            out.write(b);

            //写入字节数组的一个区间
            out.write(b,1,2);

            //将String转换成字节数组
            String data = "我想要写入一个String类型";
            out.write(data.getBytes());

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

//输入流和输出流综合实例:复制    

public class Copy
{
    publc static void main(String[] args){
        try(InputStream in = new FileInputStream("c:/第15天.pdf");
             OutputStream out = new FileOutputStream("c:/copy.pdf")){

            //一个字节复制
            int data;
            while((data = in.read()) != -1){
                out.write(data);
            }

            //字节数组复制
            byte[] data = new byte[100];
            int length;
            while( (length = in.read()) != -1){
                out.write(data,0,length);
            }
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}














































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值