大家好,又见面了,我是你们的朋友全栈君。
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();//关闭ioBufferWriter
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类就好了
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141317.html原文链接:https://javaforall.net
