IO和NIO

一.创建IO

System.out.println( "*************欢迎进入文件操作系统*************" );
        System.out.println( "*************1.创建文件*************" );
        System.out.println( "*************2.删除文件*************" );
        System.out.println( "*************3.修改文件*************" );
        System.out.println( "*************4.创建文件夹*************" );
        System.out.println( "*************5.查询文件夹下所有的文件列表*************" );
        System.out.println( "*************请选择:*************" );

        //获取用户的输入
        int choose = input.nextInt();
        switch (choose){
            case 1://创建文件
                 createNewFile();
                break;
            case 2://删除文件
                 deleteFile();
                break;
            case 3://修改文件
                 updateFile();
                break;
            case 4://创建文件夹
                 mkdirs();
                break;
            case 5://查询文件夹下所有的文件列表
                 findFileList();
                break;
        }
    }
   // 查询文件夹下所有的文件列表
    private static void findFileList() {
        System.out.println("请您输入查询的文件夹名称:(默认是E:/)");
        String fileName = input.next();
        //创建File对象
        File file=new File("E:/"+fileName);
        File[] files = file.listFiles();
        int dirNums=0;
        int fileNums=0;
        //遍历集合
        for (File f:files){
            if (f.isDirectory()){
                dirNums++;
            }
            if (f.isFile()){
               fileNums++;
                System.out.println(f.getName());
            }
        }
        System.out.println("有多少个文件夹?"+dirNums);
        System.out.println("有多少个文件?"+fileNums);
    }

    //创建文件夹
    private static void mkdirs() {
        System.out.println("请您输入创建的文件夹名称:(默认是E:/)");
        String fileName = input.next();
        //创建File对象
        File file=new File("E:/"+fileName);
        if (file.mkdirs()){
            System.out.println("创建成功");
        }else{
            System.out.println("创建失败");
        }
    }

    //修改文件
    private static void updateFile() {
        System.out.println("请您输入需要修改文件的名称:(默认是E:/)");
        String oldFileName = input.next();
        System.out.println("请您输入文件的新名称:(默认是E:/)");
        String newFileName = input.next();
        //创建File对象
        File oldFile=new File("E:/"+oldFileName);
        File newFile=new File("E:/"+newFileName);
        if(oldFile.renameTo(newFile)){
            System.out.println("修改成功");
        }else{
            System.out.println("修改失败");
        }

    }

    //删除文件
    private static void deleteFile() {
        System.out.println("请您输入删除文件的名称:(默认是E:/)");
        String fileName = input.next();
        //创建File对象
        File file=new File("E:/"+fileName);
        if (file.exists()){  //文件存在才能删除
            boolean flag = file.delete();
            if (flag){
                System.out.println("文件删除成功!");
            }else{
                System.out.println("文件删除失败!");
            }
        }else{
            System.out.println("该文件不存在!");
        }
    }

    //创建文件
    private static void createNewFile() {
        System.out.println("请您输入文件的名称:(默认是E:/)");
        String fileName = input.next();
        //创建File对象
        File file=new File("E:/"+fileName);
        if (file.exists()){  //文件已经存在
            System.out.println("该文件已经存在!");
        }else{
            try {
             boolean  flag= file.createNewFile();
             if (flag){
                 System.out.println("文件创建成功!");
             }else{
                 System.out.println("文件创建失败!");
             }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

二.流

  1.字节流

//创建输出流和输出流对象
InputStream inputStream=null
OutputStream outputStream=null
try{
    inputStream=new InputStream("e:/a.txt");
  //true 代表是否向文件中拼接,不删除之前的内容 outputStream
=new OutputStream("e:/a.txt",true);
  //先向文件写入内容 outputStream.write(
"54321".getBytes());
  //read 方法将返回0~255之间的数字如果流读到了最后,将返回-1
   int num=0;
   while((num=inputStream.read())!=-1){
    System.out.println((char)num);
  } }
catch(Exception e){ e.printStackTrace(); }finally{ try{ inputStream.close(); outputStream.close(); }catch(Exception e){ e.printStackTrace(); } }

    

  2.字符流

//创建输出流和输入流
Reader reader=null;
Writer writer=null;
try{
  reader=new FileReader("e:/a.txt");
  writer=new FileWriter("e:/a.txt",true);
  writer.write("我是小明");
  writer.flush();
  
writer.write("我是小刚");
  writer.write("我是小红");
  writer.close();
  int num=0;
  char[]data=new char{1024};
  StringBuffer sb=new StringBuffer();
  while((num=reader.read(data))!=-1){
    sb.append(data);
  }
  System.out.println(sb.toString())
  catch(Exception e){
    e.prinrStackTrace();
  }finally{
      try {     
        reader.close();
      } catch (IOException e) {
        e.printStackTrace();
      }  
   }
}
 

  3.二进制流

//创建输出流和输入流对象
InputStream inputStream=null;
OutputStream outputStream=null;
DataInputStream dis=null;
DataOutputStream dos=null;
try{
    //获取输入流
    inputStream=new InputStream("e:/a.txt");
    dis=new DataInputStream(inputStream);
    //获取输出流
    outputStream=new OutputStream("e:/a.txt");
    dos=new DataOutputStream(outputStream);
    int num=0;
    while((num=dis.read())!=-1){
        dos.write(num);//复制
    }


}catch (Exception e) {
        e.printStackTrace();
 }finally{
    dos.close();
    dis.close();
    outputStream.close();
    inputStream.close();
}

  4.缓冲流

Reader reader=null;
        Writer writer=null;
        BufferedReader  br=null;
        BufferedWriter bw=null;
        try {
            writer=new FileWriter("e:/a.txt",true);
            bw=new BufferedWriter(writer); //封装
            bw.write("我是小明!");
            bw.newLine();  //换行
            bw.write("我是小刚!");
            bw.flush();
            bw.write("我是小红!");       
            bw.close();
            writer.close();  //如果不关闭  后续两句话没法获取
            //读取
            reader=new FileReader("e:/a.txt");
            br=new BufferedReader(reader);//封装
            String line=null;
            StringBuffer sb=new StringBuffer();
            while ((line=br.readLine())!=null){
                sb.append(line);
            }
            System.out.println(sb.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                br.close();
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

  5.序列化和反序列化

static Scanner  input=new Scanner(System.in);
    //创建需要的输入和输出流对象
    static   InputStream inputStream=null;
    static  OutputStream outputStream=null;
    static ObjectInputStream objectInputStream=null;
    static ObjectOutputStream  objectOutputStream=null;

    public static void main(String[] args) {
         //注册   序列化
        //register();
        //登录  反序列化
        login();
    }

    //注册
    private static void register()  {
        User user=new User();
        System.out.println("请输入您的用户名:");
        user.setUserName(input.next());
        System.out.println("请输入您的密码:");
        user.setPassword(input.next());

        try {
            outputStream=new FileOutputStream("e:/user.txt");
            objectOutputStream=new ObjectOutputStream(outputStream);
            //把对象输出到文件中
            objectOutputStream.writeObject(user);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                objectOutputStream.close();
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }


    //登录
    private static void login() {
        try {
            inputStream=new FileInputStream("e:/user.txt");
            objectInputStream=new ObjectInputStream(inputStream);
            //读取对象
            User user= (User) objectInputStream.readObject();
            System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                objectInputStream.close();
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

三.NIO

  1.buffer   缓冲区:存储的是相同类型的数据集!

    本质是一个可以写入数据,并且从中读取数据的内存!

  2.position:写入或者读取的数据的当前指针

    最大值是:capacity-1

  3.limit:有多少数据可以写或者可以读

    在write模式下,我们的limit和capacity的值一致!

    在read模式下,我们的limit和write模式下的position的值一致

        position变成了0!

  3.capation:缓冲区的最大容量;

//创建一个容量为20的int类型缓冲区
IntBuffer buffer=IntBuffer.allocate(10);
System.out.println("capacity====>"+buffer.capacity());
System.out.println("position====>"+buffer.position());
System.out.println("limit====>"+buffer.limit());
//创建一个int类型的数组,便于放进缓冲区
int[]nums={5,6,4,6,4,3};
buffer.put(nums);
System.out.println("*************************");
System.out.println("capacity====>"+buffer.capacity());
System.out.println("position====>"+buffer.position());
System.out.println("limit====>"+buffer.limit());
//重设缓冲区  切换到 读模式
buffer.flip();
System.out.println("*************************");
System.out.println("capacity====>"+buffer.capacity());
System.out.println("position====>"+buffer.position());
System.out.println("limit====>"+buffer.limit());
//读取数据
while(buffer.hasremaining()){
    System.out.println(buffer.get());
}

猜你喜欢

转载自www.cnblogs.com/wang2386033566/p/9260241.html