IO流II

 

 

IO流:

字节流:

      InputStream

              FileInputStream

             BufferedInputStream

     OutputStream

             FileOutputStream

             BufferedOutputStream

 

字符流:

    Reader

           FileReader

           BufferedReader

   Writer

           FileWriter

           BufferedWriter

 

 

 

文件复制:

     是否是文本文件:

           是:字符流

     是否高效:

          是:带Buffer缓冲的流。

          否:字节流

 

代码体现:

复制文本文件(5种方式)

 //用字节流复制的两种方式

 import java.io.FileInputStream;

 public class CopyFileDemo{

            public static void main(String[] args) throws IOException {

            // 封装数据源

           FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java");

           FileOutputStream fos = new FileOutputStream("d:\\Copy.java");

 

          // 方式1,一次读取一个字节

         int by = 0;

        while ((by = fis.read()) != -1) {

                  fos.write(by);

        }

 

        // 方式2,一次读写一个字节数组

       byte[] bys = new byte[1024];

       int len = 0;

       while ((len = fis.read(bys)) != -1) {

              fos.write(bys, 0, len);

       }

 

            // 释放资源

            fos.close();

            fis.close();

       }

}

 

 

 

 //用字符流复制的三种方式:

 import java.io.FileReader;

 public class CopyFileDemo2{  

            public static void main(String[] args) throws IOException {

                        // 封装数据源

                        FileReader fr = new FileReader("FileOutputStreamDemo.java");

                      // 封装目的地

                     FileWriter fw = new FileWriter("d:\\Copy.java");

 

                   // 方式3,一次读取一个字符

                   int ch = 0;

                    while ((ch = fr.read()) != -1) {

                           fw.write(ch);

                   }

                // 方式4,一次读取一个字符数组

                char[] chs = new char[1024];

                int len = 0;

                while ((len = fr.read(chs)) != -1) {

                          fw.write(chs, 0, len);

               }

                //方式5,使用字符缓冲流

 

                // 封装数据源

                BufferedReader br = new BufferedReader(new FileReader("FileOutputStreamDemo.java"));

 

             // 封装目的地

            BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\Copy.java"));

 

                   String line = null;

                  while ((line = br.readLine()) != null) {

                           bw.write(line);

                           bw.newLine();

                           bw.flush();

                 } 

 

               // 释放资源

               fw.close();

              fr.close();

        }

}

 

 

 

 

复制二进制流文件(图片 4种方式)

 public class CopyImageDemo3{

             public static void main(String[] args) throws IOException {

                           method();

 

              }

 

            // 用字节流(2种)

           private static void method() throws IOException {

 

                      FileInputStream fis = new FileInputStream("123.jpg");

                      FileOutputStream fos = new FileOutputStream("成龙.jpg");       

                        // 方式1  

                       int by = 0;

                       while ((by = fis.read()) != -1) {

                                   fos.write(by);

                     }

    

               

                   //方式2

                  byte[] bys = new byte[1024];

                  int len = 0;

                  while ((len = fis.read(bys)) != -1) {

                             fos.write(bys, 0, len);

                   }

 

                         fos.close();

                         fis.close();

           }

 

 

         // 用字符流复制(2种)

         private static void method2() throws IOException {

                     BufferedReader br = new BufferedReader(new FileReader("456.jpg"));

                     BufferedWriter bw = new BufferedWriter(new FileWriter("李连杰.jpg"));

                     //方式1

                     int ch = 0;

                     while ((ch =bw.read()) != -1) {

                              bw.write(ch);

                     }

 

                      //方式2

                    String line = null;

                    while ((line = br.readLine()) != null) {

                               bw.write(line);

                                bw.newLine();

                                bw.flush();

                     }

 

                                 bw.close();

                                 br.close();

        }

}

     

 

 

 

转换流:

(1)一般来说,不需要用转换流。

(2)应用场景:

       A:字节流 -- 字符流

       B:字符编码问题

(3)转换的基本使用:

InputStreamReader:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("fis.txt")));

 

OutputStreamWriter:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("fos.txt"));

 

3:字符编码:

(1)编码表:

由字符及其对应的数值组成的一张表。

常见的码表:

ASCII

ISO-8859-1

GB2312

GBk

GB18030

BiG5

UTF-8

 

(2)转换流的编码问题

字符流 = 字节流 + 编码表。

 

InputStreamReader(InputStream is,String charsetName);

OutputStreamWriter(OutputStream os,String charsetName);

 

 

(3)字符串的编码问题

编码:把看得懂变成看不懂的

String -- byte[]

解码:把看不懂的变成能看懂的

byte[] -- String

 

代码体现:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

 

import cn.itcast.dao.UserDao;

import cn.itcast.pojo.User;

 

public class UserDaoImpl implements UserDao {

           private static final File file = new File("user.txt");

 

 

          public boolean isLogin(String username, String password) {

                    boolean flag = false;

 

                    BufferedReader br = null;

                    try {

                             br = new BufferedReader(new FileReader(file));

                              String line = null;

                             while ((line = br.readLine()) != null) {

                            // admin=admin

                             String[] datas = line.split("=");

                             if (datas[0].equals(username) && datas[1].equals(password)) {

                                      flag = true;

                                      break;

                              }

                              }

                         } catch (IOException e) {

                                  e.printStackTrace();

                         } finally {

                                  if (br != null) {

                                  try {

                                         br.close();

                                 } catch (IOException e) {

                                      e.printStackTrace();

                                 }

                       }

               }

 

                        return flag;

           }

 

 

         public void regist(User user) {

/*

 * 我将来数据在文件中的存储格式: 用户名=密码

 * 

 * 用户名:admin 密码:admin

 * 

 * admin=admin

 */

 

                BufferedWriter bw = null;

                 try {

                           bw = new BufferedWriter(new FileWriter(file, true));

                           bw.write(user.getUsername());

                           bw.write("=");

                           bw.write(user.getPassword());

                           bw.newLine();

                           bw.flush();

              } catch (IOException e) {

                      e.printStackTrace();

              } finally {

                      if (bw != null) {

                      try {

                            bw.close();

                      } catch (IOException e) {

                            e.printStackTrace();

                     }

                     }

                }

           }

 

 

     public boolean checkUsername(String username) {

                 boolean flag = false;

 

/*

 * 读取文本文件的每一个对象,并获取每一行的用户名,然后比较,如果有,则修改标记为true。

 */

                 BufferedReader br = null;

                 try {

                         br = new BufferedReader(new FileReader(file));

                         String line = null;

                         while ((line = br.readLine()) != null) {

                        // admin=admin

                        String[] datas = line.split("=");

                        if (datas[0].equals(username)) {

                              flag = true;

                              break;

                         }

                         }

                  } catch (IOException e) {

                            e.printStackTrace();

                  } finally {

                        if (br != null) {

                        try {

                               br.close();

                        } catch (IOException e) {

                               e.printStackTrace();

                    }

                    }

         }

 

                     return flag;

         }

 

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值