【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 ...
随机推荐
- JavaScript中的forEach
语法:array.forEach(callbackfn[, thisArg]) 参数说明: array1 必需. 一个数组对象. callbackfn 必需. 一个接受最多三个参数的函数. 对 ...
- Linux USB 和 sysfs
由于单个 USB 物理设备的复杂性, 设备在 sysfs 中的表示也非常复杂. 物理 USB 设备 (通过 struct usb_device 表示)和单个 USB 接口(由 struct usb_i ...
- 学习Java第八周
1.流的分类 1.字节流:Stream 2.字符流: Writer,Reader 输入流 :InputStream ,Reader 输出流 :OuputStream,Writer 字节流重要还是字符流 ...
- C++中 =default 和 =delete 使用
编译器默认为一个类生成的默认函数 默认构造函数 默认析构函数 默认拷贝构造函数 默认赋值函数 移动构造函数 移动拷贝函数 class DataOnly { public: DataOnly () // ...
- 37.html
转载:https://www.cnblogs.com/yuanchenqi/articles/5976755.html 前端概述 import socket def main(): sock = so ...
- Deep Learning ——Yann LeCun,Yoshua Bengio&Geoffrey Hinton
引言: 深度学习的本质是用多层的神经网络找到一个可以被学习的复杂的函数实现语音识别,图像识别等功能. 多层神经网络的结构: 多层神经元的组成,每一层的输入都等于上一层的输出. 应用领域:cv,nlp ...
- vue-cli项目中使用axios
前言 前后端数据交互中,我们使用最多的就是jQuey中的ajax进行数据交互,但是随着大前端日益的扩大,越来越多的库和框架也渐渐的出现在前端开发人员面前,而本编博客需要介绍的就是在vue-cli项目中 ...
- python获取网页信息的三种方法
import urllib.request import http.cookiejar url = 'http://www.baidu.com/' # 方法一 print('方法一') req_one ...
- 解决Jsp与Java后台之间url传值中文乱码问题
JSP页面中,由JavaScript拼接url时,对于中文名称变量应该加上encodeURIComponent方法,对中文进行十六进制编码. 例如: url = /com/xxx/B.jsp?chin ...
- JDBC 详解笔记
# JDBC ## 1:What? 通过Java代码来操作数据库的. 数据库的种类很多,导致不同的数据库的操作方式是不同. 通过JDBC的标准完成.通过java语言完成对于数据库的CRUD. ## 2 ...