• 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 :流已经关闭了
            
        }
    }
    
  • 相关阅读:
    ICONS-图标库
    图形资源
    vue项目中,如果修改了组件名称,vscode编辑器会在引入修改组件的名字处提示红色波浪线 The file is in the program because:Imported via xxx Root file specified for compilation .
    接口在dev环境报跨域问题(has been blocked by CORS policy:Response to preflight request doesn't pass access control check:No 'Access-Control-Allow-Origin' header ispresent on the requested resource.),qa环境正常
    阿里云occ的图片文件URL用浏览器直接打开无法访问,提示This XML file does noe appear to have any style information associated with it. The document tree is shown below.
    vue 项目使用element ui 中tree组件 check-strictly 用法(父子不互相关联的反显情况)
    高德地图进行线路规划绘制标记点操作(vue)
    vue中实现拖拽调整顺序功能
    2021-01-22 浏览器相关知识
    2021-01-22 js 相关知识点
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948249.html
Copyright © 2020-2023  润新知