java输入输出的方法

java输入输出的方法java输入输出目录一、控制台输入输出二、文件读写一、控制台输入输出 java控制台的输入输出主要依赖于scanner类,使用Scannerscanner=newScanner(System.in)获取了控制台输入的字段,其中system.in就表示这个对象读取的是控制台。publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);while(sc

大家好,又见面了,我是你们的朋友全栈君。

java输入输出

目录

一、控制台输入输出

二、文件读写


一、控制台输入输出

 java控制台的输入输出主要依赖于scanner类,使用Scanner scanner=new Scanner(System.in)获取了控制台输入的字段,其中system.in就表示这个对象读取的是控制台。

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            String s=scanner.next();
            if(s.equals("exit")){
                break;
            }
            System.out.println(s);
        }
    }

二、文件读写

文件的读写依赖于java.io类,最常用的一般为FileReaderFileWriterBufferReaderBufferWriter,其中File*为最基本的文件读写类,Buffer*则是对File*做了缓冲区以及一些其他方法的优化,效率更高。下面我们来看一下具体的方法。

  1. 注意事项

    • 要注意的是,由于'\'符号在java中有特殊的含义,所以在写文件路径时应该替换为'\\'
    • 文件的路径既可以是相对路径,也可以是绝对路径,推荐使用绝对路径
    • '\r'为光标转移到当前行的行首
    • '\n'为光标转到下一行,但不会调整左右位置
  2. 写入文件

    1. FileWriter
        FileWriter out =new FileWriter("javaproject\\sortsource.txt");//初始化,指定要写入的文件
        Random r=new Random();//获取随机数
        for (int i = 0; i < 10000000; i++) {
            out.write(String.valueOf(r.nextInt())+"\r\n");//写入数据并换行
        }
        out.flush();//将缓冲区的数据写入文件,不写也会在关闭刷新到磁盘。
        out.close();//关闭io
    
    1. BufferWriter
        BufferedWriter out=new BufferedWriter(new FileWriter("javaproject\\sortsource.txt"));//初始化,指定写入文件,这里需要filewriter类型
        Random r=new Random();
        for (int i = 0; i < 10000000; i++) {
            out.write(String.valueOf(r.nextInt()));//写入文件
            out.newLine();//换行
        }
        out.flush();//将缓冲区的数据刷新到文件里
        out.close();//关闭io操作
    
    1. 文件续写
    //覆盖写入
    new FileWriter("javaproject\\sortsource.txt")
    
    //加参数true,则表示续写
    new FileWriter("javaproject\\sortsource.txt",true)
    
  3. 文件读取

     public class FileReaderTest {
         public static void main(String[] args) {
             try {
                 FileReader in = new FileReader("javaproject\\FileWriter.txt");//建立filereader对象,指定要读取的文件
                 BufferedReader br=new BufferedReader(in);//由于filereader没有方法可以用来读取数据,我们用bufferedreader来读取
                 for (int i = 0; i < 10; i++) {
                     System.out.println(br.readLine());//readline每次读取一行数据
                 }
                 br.close();//关闭io
    
             } catch (Exception e) {
    
             }
    
         }
     }
    

    结果:

    20200705194011

  4. File*Buffer*的区别

    • 首先与其他文章讲的file没有缓冲区buffer有缓冲区所以导致file频繁刷新磁盘导致效率不高不同,其实file也是有缓冲区的,我们来做一个实验:
      • 我们在flush之前打上断点,可以看到,还有167条数据没有写入文件,还在缓冲区里
        20200627180230

    20200705180844

    • 解除debug之后1000万条数据都写入了

    20200705181107

    • buffer只是将file的缓冲区优化了,所以效率会更高一些,我们再来看一下例子:
      • 和之前一样,我们也在flush之前打上断点

    20200705181345

    • 可以看到,有874条数据还没有刷新到磁盘文件里,从这里可以看到buffer类的默认缓冲区是要比file大的,这样他可以进行更少次数的io,效率会更高

    20200705181414

    • file换行时必须要使用换行符,但是在不同的系统中,换行符往往是不同的,有的系统换行是'\r\n',而有的则是'\n',跨平台性不好,而buffer则提供了换行的方法newLine()
    • 综上所述,在实际使用中,尽量选择buffer类就好了。
  5. File*Buffer*效率差异

通过之前对于两个类区别的探讨我们知道buffer效率上是比file高的,但是具体高多少呢?我们试一下下面的例子,每个类分别写入一亿条随机数,看一下范别耗时多久:

20200705183104

写入完成:

20200705190528

最终结果:

20200705190458

可以看到buffer类比file类快了一半的时间,所以在平常使用的时候,我们使用buffer类就好了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141317.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • golang:[]byte转string

    golang:[]byte转stringgolang中,字符切片[]byte转换成string最简单的方式是packagemainimport(“fmt”_”unsafe”)funcmain(){bytes:=[]byte(“Iambytearray!”)str:=string(bytes)bytes[0]=’i’//注意这一行,bytes在这里修改了数据,但是str打印出来的依然没变化,fmt.Println(str)}打印信息:I

    2022年6月16日
    37
  • 源码安装LAMP

    源码安装LAMP

    2021年8月14日
    54
  • RO38 –比较RemObjects SDK 通道「建议收藏」

    RO38 –比较RemObjects SDK 通道「建议收藏」 RO38–比较RemObjectsSDK通道                                  本文汇总了RemObjectsSDK提供的通道:最通用的通道1)HTTP通道:使用www超文本传输协议的灵活,网络无关的通信.2)SuperTCP通道:在客户端服务端灵活通用的双向传输

    2022年7月15日
    16
  • React 路由详解(超详细详解)

    React 路由详解(超详细详解)ReactReact路由对SPA的理解1.单页Web应用(singlepagewebapplication,SPA)。2.整个应用只有一个完整的页面。3.点击页面中的链接不会刷新页面,只会做页面的局部更新。4.数据都需要通过ajax请求获取,并在前端异步展现。路由的理解1.什么是路由1.一个路由就是一个映射关系(key:value)2.key为路径,value可能是function或component2.路由分类1.后端路由:1)理解:value是fun

    2022年4月28日
    48
  • 【Win10 64位 Modelsim安装教程】双击patch_dll.bat时一闪而过/找不到文件mgls.dll的解决方法

    【Win10 64位 Modelsim安装教程】双击patch_dll.bat时一闪而过/找不到文件mgls.dll的解决方法关于双击patch_dll.bat之后一闪而过,没有生成LICENSE.TXT的解决方案其实不是一闪而过,仔细看一下显示的是“找不到文件-mgls.dll”win+R,输入cmd在cmd中从根目录一步一步进入win64文件夹,运行patch_dll.bat即可。我安装的时候等了两分钟才生成LICENSE.TXT,所以回车后没反应的话,多等一会试试。如图:完整的破解教程其实破解…

    2022年5月23日
    1.0K
  • Java实现MD5算法

    Java实现MD5算法MD5算法工具类importjava.security.MessageDigest;/**加密工具**@author刘彦青***/publicclassEncryptUtil{ /**MD5加密 * *@paramjiami *源字符串 *@return加密后的字符串*/ publicfina…

    2022年7月9日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号