【java面试】IO流
KENDOEVERTHING
2024-11-08 10:28:32
原文
一.IO
1.IO概念
·输入流:把能够读取一个字节序列的对象称为输入流(百度百科)
·输出流:把能够写一个字节序列的对象称为输出流(百度百科)
从定义上看可能会让你感到困惑,这里解释一下:]; //先写到缓存中,然后再一起写到其他外设中
int length = 0;
while ((length=in.read(buf))!=-1){ //-1 represent the end of the file is reached ,
//字节一个一个地读入到内存
System.out.println(new String(buf,0,length)); //需要将int转为字节,如果为中文的话输出乱码字符 ,
//此处其实是写出到了外设(控制台)上,System.out返回的是PrintStream对象
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
··); //文件中产生ASC码对应的字符
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
];
int len = 0;
while ((len=in.read(buff))!=-1){
out.write(buff,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null){
in.close();
}
if (out != null){
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
;
while ((len = reader.read())!= -1){
out.write(len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out!=null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
··BufferedReader:从一个字符输入(character-input)流中读取文本(text),并进行缓冲字符,默认缓存8192(8M),行最长80
构造函数要和Reader in/int size 关联:InputStreamReader
——in read()
——in read(char [] cbuf,int off,int len)
——String readLine()
——close()
★键盘录入,使用缓存
- BufferedReader buffr = new BufferedReader(new InputStreamReader(System.in))
·Writer:for writing to character streams (字符流的写操作基本上后面都需要进行flush()操作)
··OutputStreamWriter :从字符流到字节流的桥梁:写出的字符被用指定的编码方式进行编码。
构造函数要和OutputStream out/charset 关联:System.out/FileOutputStream
——write(int c):写一个单独的字符
——write(char [] cbuf,int off,int len)
——write(String str,int off,int len)
——flush():刷新流
——close()
···FileWriter:写字符文件的方便类,实质是:OutputStreamWriter指定了默认的本机编码方式,且可以处理文件
··BufferedWriter:写文本到一个字符输出(character-out)流,并对传入的字符进行缓存
构造函数要和 Writer out/int size 相关联
——write(int c):写一个单独的字符
——write(char [] cbuf,int off,int len)
——write(String str,int off,int len)
——newLine():换行
——flush():刷新流
——close()
★控制台输出,使用缓存
- BufferedWriter buffw= new BufferedWriter(new OutputStreamWriter(System.out,"utf-8"));
★键盘输入,控制台输出功能
- import java.io.*;
- /**
- * Created by 111 on 2016/2/26.
- */
- public class Demo5 {
- /**
- * 键盘输入,控制台输出
- * @param args
- */
- public static void main(String[]args){
- BufferedReader buff = null;
- BufferedWriter bufferedWriter = null;
- String line = null;
- try {
- buff = new BufferedReader(new InputStreamReader(System.in,"utf-8"));
- bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out,"utf-8"));
- <span style="font-family:SimSun;">while</span> ((line=buff.readLine())!=null){
- bufferedWriter.write(line);
- <span style="font-family:KaiTi_GB2312;"> <span style="font-family:SimSun;"> }</span></span>
- bufferedWriter.flush(); //一定要刷新
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (buff!=null){
- try {
- buff.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (out!=null){
- try {
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
☆面试题:简述一下将文件中的数据输入到另一个文件中的步骤
1.首先创建File对象,并且和需要操作的文件相关联,这时候需要对文件进行判断是否存在,不存在则会报错
2.既然是读取文件并且写到文件,属于纯文本,可以选择FileReader和FileWriter进行读写操作,如果出现乱码可以使用其父类指定编码方式
3.创建FileReader对象用于读取文件中的数据,这里可以使用缓冲流进行处理,提高效率,创建一个BufferedReader对象
BufferedReader buffr = new BufferedReader(new InputStreamReader(new FileReader(file)));
4.创建FileWriter,同上使用缓存
★代码如下
- import java.io.*;
- /**
- * Created by 111 on 2016/2/26.
- */
- public class Demo6 {
- public static void main(String[] args){
- File origin = new File("d:/helloWorld.txt");
- File destination = new File("d:/helloWorld6.txt");
- InputStreamReader in = null;
- OutputStreamWriter out = null;
- BufferedReader reader = null;
- BufferedWriter writer = null;
- if (!origin.exists()){
- try {
- origin.createNewFile();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- try {
- reader = new BufferedReader(new InputStreamReader(new FileInputStream(origin),"ISO-8859-1"));
- // reader = new BufferedReader(new FileReader(origin));
- writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destination),"ISO-8859-1"));
- String line = null;
- while ((line = reader.readLine())!=null){
- writer.write(line);
- writer.newLine();
- }
- writer.flush();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (in!=null){
- try {
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (out!=null){
- try {
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (reader!= null){
- try {
- reader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (writer!=null){
- try {
- writer.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
- java的IO流
java的IO流继承四大抽象类分别是字节流 inputStream outputStream与字符流 read write.怎么理解记忆很重要. 直接连接读写对象的是结点流,例如对文件读取字节类的名字 ...
- Java基础——IO流
今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...
- 【Java】IO流简单分辨
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827509.html Java的IO流体系十分庞大,并且体系层次稍复杂,很容易记混或记错.在此,我把平时经常用 ...
- Java - 文件(IO流)
Java - 文件 (IO) 流的分类: > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter ...
- Java中IO流的总结
有关Java中IO流总结图 流分类 按方向分 输入流 输出流 按单位分 字节流 字符流 按功能分 节点流 处理流(过滤流) 其他 所有的流继承与这四类流:InputSteam.OutputStream ...
- JAVA中IO流总结
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42119261 我想你对JAVA的IO流有所了解,平时使用的 ...
- 第15章-输入/输出 --- 理解Java的IO流
(一)理解Java的IO流 JAVA的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出(键盘.文件.网络连接等)抽象表述为"流"( ...
- Java基础IO流(二)字节流小案例
JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...
- java的Io流学习
Java中io流的学习(一)File:https://blog.csdn.net/qq_41061437/article/details/81672859 Java中io流的学习(二)FileInpu ...
- Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)
Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...
随机推荐
- vue-learning:13 - js - vue作用域概念:全局和局部
目录 全局作用域:Vue对象 全局api 局部作用域: 实例对象vm 实例api 组件component 组件配置选项 在引入Vue文件时,就相当于拥有了一个全局Vue对象. 在var vm = ne ...
- HDU 6662 Acesrc and Travel (换根dp)
Problem Description Acesrc is a famous tourist at Nanjing University second to none. During this sum ...
- 魅族--魅蓝metal
评论:金属潮流平民化
- 学习Java第三周
这是学习java的第三周 上周想要学习的这周也完成了,研究和测试代码花费了大约2个小时,发现这些内容方法居多,想要熟练掌握就要好好记忆了 包装类 数字处理类 Object类 Java类包 内部类 下一 ...
- 用Qt写的简单屏保程序
近日老大提别人家产品都有屏保程序,貌似我们也该有,简单在qtcn.org请教了一下,写了个小程序! 晕倒,半天没找到上传功能!我已经上传到qtcn上了,地址如下: http://www.qtcn.or ...
- slim中返回结果加密的
//返回结果不加密 $this->get("/open]",function (Request $request, Response $response, $args) { ...
- 9. SOFAJRaft源码分析— Follower如何通过Snapshot快速追上Leader日志?
前言 引入快照机制主要是为了解决两个问题: JRaft新节点加入后,如何快速追上最新的数据 Raft 节点出现故障重新启动后如何高效恢复到最新的数据 Snapshot 源码分析 生成 Raft 节点的 ...
- 关于js如果控制标签的字符长度
js名字长度限定(如限制为50个字符,超过的显示...) var new_playerName = ""; jQuery(".translate").each( ...
- 人生苦短,我用Python(4)
1.创建数值元组: 在Python中,使用tuple()函数直接将range()函数循环出来的结果转换为数值元组. tuple(data) #tuple()函数的基本语法 data表示可以转换为元组的 ...
- 如何使用JMX来管理程序?
什么是JMX JMX,全称Java Management Extensions,用于我们管理和监控java应用程序.JMX有以下用途: 监控应用程序的运行状态和相关统计信息. 修改应用程序的配置(无需 ...