java输入输出的方法

2023-11-10

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类就好了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java输入输出的方法 的相关文章

随机推荐

  • fedora 27 安装 android studio

    Reference Fedora wiki Android Studio Fedora23 安装Android Studio 在fedora下进行Android studio 安装和前期配置 Android Studio 为Android
  • Python字典的操作小技巧——索引、增添、删除、修改与取键和值

    字典是非常常用的一种数据结构 它与json格式的数据非常相似 核心就是以键值对的形式存储数据 关于Python中的字典做如下四点说明 构造字典对象需要使用大括号表示 即 每一个字典元素都是以键值对的形式存在 并且键值对之间用英文状态下的冒号
  • linux如何复制文件夹和

    CP命令 格式 CP 选项 源文件或目录 目的文件或目录 选项说明 b 同名 备分原来的文件 f 强制覆盖同名文件 r 按递归方式保留原目录结构复制文件 cp r tmp a root a 记得有空格 1 vi filename 打开或新建
  • 【C++】类的前置声明

    两个类要互相引用 就会出现 未定义 尴尬 此时可以用前置声明来解决 class person 类的前置声明 class Animal public void eat person pn class person public friend
  • Qt串口接收一帧不完整问题

    1 串口通信接收不全问题 在触发接收后 调用一次waitForReadyRead 等待100ms 后续再readAll 目前都能完整接收一帧 connect m serialPort SIGNAL readyRead this SLOT r
  • xcode中如何显示文件后缀

    xcode14 3 用不惯mac电脑真恶心 改个显示文件后缀找半天 1 首先双击打开xcode软件 2 此时 电脑左上角出现xcode字样 左上角如果看不到xcode字样 再次点击xcode软件弹出来就有了 鼠标右键它 点击setting或
  • 安装zookeeper详解教程(windows单机版)(以及解决方法)

    1 下载安装包 Apache官网下载 我选的比较稳定的旧版本 地址 Apache ZooKeeperhttps zookeeper apache org releases html 2 解压到本地目录 3 配置文件 进入conf目录下将zo
  • A. Doremy‘s IQ(贪心)

    Problem A Codeforces 题意 一个人的IQ为q 有n场比赛 第i天只能参加第i场比赛 如果比赛难度大于IQ 那么IQ就会下降 如果IQ为0就不能参加比赛了 问最多能参加多少场比赛 输入一个01串 0表示不参加 1表示参加
  • 【nlp-with-transformers】

    今天社群中的小伙伴面试遇到了一个问题 如何保证生成式语言模型在同样的输入情况下可以保证同样的输出 这里面造成问题的因素有两个方面 一个方面是在forward过程中参数的计算出现了差异 这种情况一般发生在游戏显卡中 游戏显卡无法保证每一次底层
  • 基于用户的协同过滤算法(userCF)

    1 定义 userCF 当一个用户A需要个性化推荐时 可以先找到和他有相似兴趣的其他用户 然后把那些用户喜欢的 而用户A没有听说过的物品推荐给A 这种方法称为基于用户的协同过滤算法 基于用户的协同过滤算法主要包括两个步骤 2 第一步 找到和
  • c++ java rgb与nv21互转

    目录 jni函数 c rgb转nv21 可以转 不报错 但是转完只有黑白图 java yuv420保存图片 先转nv21 再保存ok c yuv420月bgr互转 测试ok jni函数 JNIEXPORT void JNICALL Java
  • 一.安装deepin

    笔记本是联想拯救者y7000 原配 cpu i5 8300h 三星内存8g 固态128g 2T机械 独显是nvidia gtx1050ti 后加装16G同品牌同频率内存组24G内存 固态128卸掉换512 伴随着几次win10升级 电脑待机
  • kingbaseES查询数据库里一个模式下所有的表以及大小

    1 例如以public模式为样例 SELECT table name sys size pretty table size AS table size sys size pretty indexes size AS indexes size
  • react usestate 更新_React中setState同步更新策略

    setState 同步更新 我们在上文中提及 为了提高性能React将setState设置为批次更新 即是异步操作函数 并不能以顺序控制流的方式设置某些事件 我们也不能依赖于this state来计算未来状态 典型的譬如我们希望在从服务端抓
  • 静态时序分析——单周期

    一 建立时间的检查 建立时间的检查是指检查电路里每一个触发器的数据和时钟的关系是否满足建立时间的要求 我们以上图为例进行建立时间检查 由图可知 我们主要针对第二个触发器UFF1进行检查 我们可以梳理时序关系如下 通过这个图 我们可以得到满足
  • 01 二叉树的BFS(广度、层次或水平遍历实现)【Binary Tree 二叉树】

    二叉树的遍历分为BFS和DFS两种大类 下面完整实现BFS遍历二叉树 例如二叉树 1 2 3 4 5 BFS遍历结果 1 2 3 4 5 具体的代码实现 方法一 采用递归遍历的方法实现 Recursive C program for lev
  • el-dialog分析

  • 上海AI实验室与商汤科技等发布“书生·浦语”大语言模型

    随着AI大语言模型越来越多地表现出接近人类的智能 面向人类设计的高难度 综合性考试被越来越多地引入对语言模型的智能水平进行评测 OpenAI在其关于GPT 4的技术报告中就主要通过各领域的考试对模型能力进行检验 2023年高考开考 中文大语
  • vue环境配置

    一 安装nvm 介绍 https zhuanlan zhihu com p 38819529 安装包 https github com coreybutler nvm windows releases 注意 安装路径不能有中文或者空格 在安
  • java输入输出的方法

    java输入输出 目录 一 控制台输入输出 二 文件读写 一 控制台输入输出 java控制台的输入输出主要依赖于scanner类 使用Scanner scanner new Scanner System in 获取了控制台输入的字段 其中s