【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 ...
随机推荐
- 2018-9-30-C#-使用外部别名
title author date CreateTime categories C# 使用外部别名 lindexi 2018-09-30 18:37:23 +0800 2018-07-02 14:31 ...
- 【47.63%】【hdu 1532】Drainage Ditches
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...
- 阿里云基于OSS的云上统一数据保护方案2.0正式发布
近年来,随着越来越多的企业从传统经济向数字经济转型,云已经渐渐成为数据经济IT新常态.核心业务系统上云,云上的业务创新,这些都产生了大量的业务数据,这些数据也成为了企业最重要的资产.资源.阿里云基于O ...
- 使用condition 实现线程顺序执行
书上给的例子都是ABCABC这种,比较简单,复杂点的如A0B0C0, A0A1A2没有,手动实现下,做个记录 1. A0 A1 A2 A3 public class Demo0 { private s ...
- python3中map函数
map函数是Python里面比较重要的函数 map函数后面必须接的是序列(元组/列表/字符串) 在python2中执行一些语句 >>> map(str,[1,2,3,4]) ['1' ...
- MBean 描述符
简介 Tomcat 使用 JMX MBean 来实现自身的性能管理. 每个包里的 mbeans-descriptor.xml 是针对 Catalina 的 JMX MBean 描述. 为了避免出现 “ ...
- Visioi形状相关应用
选择手柄为白点 按住shift的同时移动白点更为灵活 黄色的点就是控制手柄(只有一维图形有) 当调整形状出现绿色边的时候说明:这个时候这个形状的边等于了某个形状的长 铅笔工具可以移动控制点来更形状 ...
- Elasticsearch基本概念和使用
Elasticsearch基本概念和使用 1.操作索引 1.1.基本概念 Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的. 对比关系: 索引( ...
- 洛谷$P3645\ [APIO2015]$雅加达的摩天楼 最短路
正解:最短路 解题报告: 传送门$QwQ$ 考虑暴力连边,发现最多有$n^2$条边.于是考虑分块 对于长度$p_i$小于等于$\sqrt(n)$的边,建立子图$d=p_i$.说下关于子图$d$的定义? ...
- $vjudge-dp$专题题解
因为感觉题解写不了多少,,,就懒得一道道题目慢慢写了,汇总了算了$QAQ$ 昂然后因为我估计以后还会有些什么$dp$专题啊$balabala$的,,,然后谢总肯定又会建一堆小组啥的,,,所以还是放个链 ...