• Java中输入时IO包与Scanner的区别


    最常用的一个IO控制台输入的

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Scanner;
    
    public class io {
    	public static void main(String[] args) throws IOException {//这里是防止io出现异常提前指定异常
    		InputStreamReader isr = new InputStreamReader(System.in);
    		BufferedReader br = new BufferedReader(isr);
    		String s = br.readLine();
    		//io包的输入相对来说是快捷的,但缺点是只有字符串,如果有其他需要,还需要自己转
    		Scanner sc = new Scanner(System.in);
    		String ss = sc.nextLine();
    		//相对来说Scanner是慢一些的,但Scanner接受的种类比较多
    		//可以接受int等等其他类型
    		
    		
    		//对于控制台输入来说
    		//如果接受大型字符串的还是用io包的比较好,快捷
    		//对于接受比较多的,或者说接受非字符串的类型来说Scanner比较好用
    	}
    
    }
    
    

    字符转换输入流:InputStreamReader (字符转换输入流=字节流+编码格式)

    构造方法
    public InputStreamReader(InputStream in)
    创建一个使用默认字符集的 InputStreamReader。

    public InputStreamReader(InputStream in,Charset cs)
    创建使用给定字符集的 InputStreamReader。
    cs - 字符集

    常用方法
    public int read()throws IOException
    读取单个字符。
    读取的字符,如果已到达流的末尾,则返回 -1

    public int read(char[] cbuf) throws IOException
    将字符读入数组。
    读取的字符数,如果已到达流的末尾,则返回 -1

    public void close() throws IOException
    关闭该流并释放与之关联的所有资源。

    示例程序

    public static void main(String[] args) throws Exception{
        InputStreamReader isr = new InputStreamReader(new FileInputStream("osw.txt"),"gbk") ;
            
        //读数据
        //一次读取一个字符数组
        char[] chs = new char[1024] ;
        int len = 0 ;
        while((len=isr.read(chs))!=-1) {
            System.out.println(new String(chs,0,len));
        }
            
        //关闭资源
        isr.close();
    }
    

    FileInputStream类
    从文件系统中的某个文件中获得输入字节。(继承自InputStream类)

    构造方法
    public FileInputStream(File file)
    通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

    public FileInputStream(String name)
    通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

    常用方法
    public abstract int read() throws IOException:
    一次读取一个字节
    返回:下一个数据字节;如果已到达文件末尾,则返回 -1。

    public int read(byte[] b) throws IOException:
    一次读取一个字节数组 (读取实际的字节数) 指定字节数组的长度是:1024或者1024的倍数
    返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
    b - 存储读取数据的缓冲区

    public void close() throws IOException
    关闭此文件输入流并释放与此流有关的所有系统资源。
    开发步骤:
    1)创建字节文件输入流对象
    2)读数据
    3)释放资源

    示例程序:

    public class FileInputStreamDemo {
        public void demo() throws Exception{
                    FileInputStream fis  = new FileInputStream("fis.txt") ;
            int by = 0 ;
            while((by=fis.read())!=-1) {
                System.out.print((char)by);
            }        
            //释放资源
            fis.close();       
        }
    }
    

    FileWriter字符输出流

    构造方法
    public FileWriter(String fileName) throws IOException
    根据给定的文件名构造一个 FileWriter 对象。
    fileName - 一个字符串,表示与系统有关的文件名。

    public FileWriter(String fileName,boolean append) throws IOException
    根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
    fileName - 一个字符串,表示与系统有关的文件名。
    append - 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。

    public FileWriter(File file) throws IOException
    根据给定的 File 对象构造一个 FileWriter 对象。
    file - 要写入数据的 File 对象。

    常用方法
    public void write(int c):
    写单个字符

    public void write(char[] cbuf):
    写字符数组

    public abstract void write(char[] cbuf, int off, int len):
    写字符数组的一部分

    public void write(String str):
    写字符串

    public void write(String str,int off, int len):
    写字符串的某一部分

    public void flush() throws IOException
    刷新该流的缓冲。

    public void close() throws IOException
    关闭此流,但要先刷新它

    FileOutputStream类
    文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。(OutputSteam的子类)

    构造方法
    public FileOutputStream(File file) throws FileNotFoundException
    创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

    public FileOutputStream(File file,boolean append)throws FileNotFoundException
    创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。创建一个新 FileDescriptor 对象来表示此文件连接。
    append - 如果为 true,则将字节写入文件末尾处,而不是写入文件开始处

    常用方法
    public void write(int b) throws IOException:
    一次写一个字节 b- 要写入的字节。

    public void write(byte[] b) throws IOException:
    一次写一个字节数组

    public void write(byte[] b, int off,int len) throws IOException:
    一次写一部分字节数组

    public void close()throws IOException
    关闭此文件输出流并释放与此流有关的所有系统资源。此文件输出流不能再用于写入字节。

    开发步骤:
    1)创建字节输出流对象
    2)写数据
    3)关闭资源

    程序示例

    public static void main(String[] args) throws Exception {
     
            FileOutputStream fos = new FileOutputStream("fos.txt") ; //FileNotFoundException
            // 使用流对象给文件中写入数据
            fos.write("hello".getBytes());        
            //关闭资源
            /**
             * 1)将文件和流对象不建立关系了 (fos对象不指向fos.txt)
             * 2)及时释放掉流对象所占用的内存空间
             */
            fos.close();
            /**
             * 如果关闭流对象了,那么就不能对流对象进行操作了
             */
            fos.write("java".getBytes());//java.io.IOException: Stream Closed :流已经关闭了
            
        }
    }
    
  • 相关阅读:
    Vue 中常见性能优化
    简单模板引擎实现
    函数柯理化
    url 解析
    快排
    防抖节流实现
    call、apply、bind 实现
    深克隆
    数组去重
    eventEmitter 简单实现
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078752.html
Copyright © 2020-2023  润新知