大家好,又见面了,我是你们的朋友全栈君。
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类,最常用的一般为FileReader
、FileWriter
、BufferReader
、BufferWriter
,其中File*
为最基本的文件读写类,Buffer*
则是对File*
做了缓冲区以及一些其他方法的优化,效率更高。下面我们来看一下具体的方法。
-
注意事项
- 要注意的是,由于
'\'
符号在java中有特殊的含义,所以在写文件路径时应该替换为'\\'
- 文件的路径既可以是相对路径,也可以是绝对路径,推荐使用绝对路径
'\r'
为光标转移到当前行的行首'\n'
为光标转到下一行,但不会调整左右位置
- 要注意的是,由于
-
写入文件
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
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操作
- 文件续写
//覆盖写入 new FileWriter("javaproject\\sortsource.txt") //加参数true,则表示续写 new FileWriter("javaproject\\sortsource.txt",true)
-
文件读取
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) { } } }
结果:
-
File*
与Buffer*
的区别- 首先与其他文章讲的file没有缓冲区buffer有缓冲区所以导致file频繁刷新磁盘导致效率不高不同,其实file也是有缓冲区的,我们来做一个实验:
- 我们在flush之前打上断点,可以看到,还有167条数据没有写入文件,还在缓冲区里
- 我们在flush之前打上断点,可以看到,还有167条数据没有写入文件,还在缓冲区里
- 解除debug之后1000万条数据都写入了
- buffer只是将file的缓冲区优化了,所以效率会更高一些,我们再来看一下例子:
- 和之前一样,我们也在flush之前打上断点
- 可以看到,有874条数据还没有刷新到磁盘文件里,从这里可以看到buffer类的默认缓冲区是要比file大的,这样他可以进行更少次数的io,效率会更高
- file换行时必须要使用换行符,但是在不同的系统中,换行符往往是不同的,有的系统换行是
'\r\n'
,而有的则是'\n'
,跨平台性不好,而buffer则提供了换行的方法newLine()
- 综上所述,在实际使用中,尽量选择buffer类就好了。
- 首先与其他文章讲的file没有缓冲区buffer有缓冲区所以导致file频繁刷新磁盘导致效率不高不同,其实file也是有缓冲区的,我们来做一个实验:
-
File*
与Buffer*
效率差异
通过之前对于两个类区别的探讨我们知道buffer效率上是比file高的,但是具体高多少呢?我们试一下下面的例子,每个类分别写入一亿条随机数,看一下范别耗时多久:
写入完成:
最终结果:
可以看到buffer类比file类快了一半的时间,所以在平常使用的时候,我们使用buffer类就好了
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141317.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...