Java中输入时IO包与Scanner的区别
最常用的一个IO控制台输入的
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class io {
public static void main(String[] args) throws IOException {//这里是防止io出现异常提前指定异常
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
//io包的输入相对来说是快捷的,但缺点是只有字符串,如果有其他需要,还需要自己转
Scanner sc = new Scanner(System.in);
String ss = sc.nextLine();
//相对来说Scanner是慢一些的,但Scanner接受的种类比较多
//可以接受int等等其他类型
//对于控制台输入来说
//如果接受大型字符串的还是用io包的比较好,快捷
//对于接受比较多的,或者说接受非字符串的类型来说Scanner比较好用
}
}
字符转换输入流:InputStreamReader (字符转换输入流=字节流+编码格式)
构造方法
public InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。
public InputStreamReader(InputStream in,Charset cs)
创建使用给定字符集的 InputStreamReader。
cs - 字符集
常用方法
public int read()throws IOException
读取单个字符。
读取的字符,如果已到达流的末尾,则返回 -1
public int read(char[] cbuf) throws IOException
将字符读入数组。
读取的字符数,如果已到达流的末尾,则返回 -1
public void close() throws IOException
关闭该流并释放与之关联的所有资源。
示例程序
public static void main(String[] args) throws Exception{
InputStreamReader isr = new InputStreamReader(new FileInputStream("osw.txt"),"gbk") ;
//读数据
//一次读取一个字符数组
char[] chs = new char[1024] ;
int len = 0 ;
while((len=isr.read(chs))!=-1) {
System.out.println(new String(chs,0,len));
}
//关闭资源
isr.close();
}
FileInputStream类
从文件系统中的某个文件中获得输入字节。(继承自InputStream类)
构造方法
public FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
public FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
常用方法
public abstract int read() throws IOException:
一次读取一个字节
返回:下一个数据字节;如果已到达文件末尾,则返回 -1。
public int read(byte[] b) throws IOException:
一次读取一个字节数组 (读取实际的字节数) 指定字节数组的长度是:1024或者1024的倍数
返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
b - 存储读取数据的缓冲区
public void close() throws IOException
关闭此文件输入流并释放与此流有关的所有系统资源。
开发步骤:
1)创建字节文件输入流对象
2)读数据
3)释放资源
示例程序:
public class FileInputStreamDemo {
public void demo() throws Exception{
FileInputStream fis = new FileInputStream("fis.txt") ;
int by = 0 ;
while((by=fis.read())!=-1) {
System.out.print((char)by);
}
//释放资源
fis.close();
}
}
FileWriter字符输出流
构造方法
public FileWriter(String fileName) throws IOException
根据给定的文件名构造一个 FileWriter 对象。
fileName - 一个字符串,表示与系统有关的文件名。
public FileWriter(String fileName,boolean append) throws IOException
根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
fileName - 一个字符串,表示与系统有关的文件名。
append - 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。
public FileWriter(File file) throws IOException
根据给定的 File 对象构造一个 FileWriter 对象。
file - 要写入数据的 File 对象。
常用方法
public void write(int c):
写单个字符
public void write(char[] cbuf):
写字符数组
public abstract void write(char[] cbuf, int off, int len):
写字符数组的一部分
public void write(String str):
写字符串
public void write(String str,int off, int len):
写字符串的某一部分
public void flush() throws IOException
刷新该流的缓冲。
public void close() throws IOException
关闭此流,但要先刷新它
FileOutputStream类
文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。(OutputSteam的子类)
构造方法
public FileOutputStream(File file) throws FileNotFoundException
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
public FileOutputStream(File file,boolean append)throws FileNotFoundException
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。创建一个新 FileDescriptor 对象来表示此文件连接。
append - 如果为 true,则将字节写入文件末尾处,而不是写入文件开始处
常用方法
public void write(int b) throws IOException:
一次写一个字节 b- 要写入的字节。
public void write(byte[] b) throws IOException:
一次写一个字节数组
public void write(byte[] b, int off,int len) throws IOException:
一次写一部分字节数组
public void close()throws IOException
关闭此文件输出流并释放与此流有关的所有系统资源。此文件输出流不能再用于写入字节。
开发步骤:
1)创建字节输出流对象
2)写数据
3)关闭资源
程序示例
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("fos.txt") ; //FileNotFoundException
// 使用流对象给文件中写入数据
fos.write("hello".getBytes());
//关闭资源
/**
* 1)将文件和流对象不建立关系了 (fos对象不指向fos.txt)
* 2)及时释放掉流对象所占用的内存空间
*/
fos.close();
/**
* 如果关闭流对象了,那么就不能对流对象进行操作了
*/
fos.write("java".getBytes());//java.io.IOException: Stream Closed :流已经关闭了
}
}
Java中输入时IO包与Scanner的区别的更多相关文章
- java中最常用jar包的用途说明
java中最常用jar包的用途说明,适合初学者 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实 ...
- Java中net.sf.json包关于JSON与对象互转的问题
在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递.数据的格式通常有2种:1.xml:2.JSON.通常来说都是使用JSON来传递数据.本文正是介 ...
- Java中net.sf.json包关于JSON与对象互转的坑
在Web开发过程中离不开数据的交互,这就需要规定交互数据的相关格式,以便数据在客户端与服务器之间进行传递.数据的格式通常有2种:1.xml:2.JSON.通常来说都是使用JSON来传递数据.本文正是介 ...
- java中4种修饰符访问权限的区别及详解全过程
java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为 ...
- Java中集合List,Map和Set的区别
Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Ke ...
- Java中的“==操作符”和equals方法有什么区别
Java中的"=="和equals方法究竟有什么区别? 1.==操作符 "=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的 ...
- java中,return和return null有什么区别吗?
java中,return和return null有什么区别吗? 最大的区别:return;方法的返回值必须是void!return null;方法的返回值必须不是 原始数据类型(封装类除过)和void ...
- Java中关键字continue、break和return的区别
Java中关键字continue.break和return的区别: continue:跳出本次循环继续下一次循环 break: 跳出循环体,继续执行循环外的函数体 return: 跳出整个函数 ...
- Java中Compareable和Comparator两种比较器的区别
Java中Compareable和Comparator两种比较器的区别 参考原文链接:https://www.cnblogs.com/ldy-blogs/p/8488138.html 1.引言 在ja ...
随机推荐
- Python --函数学习3 (将函数存储在模块中)
将函数存储在模块 函数可以将代码块和主程序分离,通过给函数指定描述性名称,可以让主程序更加容易理解,还可以更进一步,将函数存储在模块的独立文件中,再将模块导入到主程序.import 语句允许再当前运行 ...
- PHP正则表达式语法汇总
首先,让我们看看两个特别的字符:'^' 和 ‘$' 他们是分别用来匹配字符串的开始和结束,一下分别举例说明"^The": 匹配以 "The"开头的字符串;&qu ...
- Android 编译系统
1,Makefile编译方式 TARGET: PREREQUISITES COMMANDS 1,TARGET是需要生成的目标文件,PREREQUISTIES代表了目标所依赖的所有文件. 2,简单的Ma ...
- mybatis开发,你用 xml 还是注解?我 pick ...
最近在看公司项目时发现有的项目mybatis是基于注解开发的,而我个人的习惯是基于xml文件开发. 对于mybatis注解开发的原理理解不够,于是翻阅了部分源码,写下此文.主要介绍了mybatis开发 ...
- Nginx初步入门
1.Nginx介绍 官网:nginx.org Nginx ("engine x") 是一个开源的.支持高性能.高并发的WWW服务和代理服务软件. 它是由俄罗斯人IgorSysoev ...
- 读懂操作系统(x64)之堆栈帧(过程调用)
前言 上一节内容我们对在32位操作系统下堆栈帧进行了详细的分析,本节我们继续来看看在64位操作系统下对于过程调用在处理机制上是否会有所不同呢? 堆栈帧 我们给出如下示例代码方便对照汇编代码看,和上一节 ...
- windows假死原因调查
0. 现象 windows假死了,键盘功能正常,就是画面卡住不动了. 1. 看log linux下面很容易通过命令dmesg和/var/log/message来看日志. 但是windows就懵逼了,不 ...
- 终于明白了vue使用axios发送post请求时的坑及解决原理
前言:在做项目的时候正好同事碰到了这个问题,问为什么用axios在发送请求的时候没有成功,请求不到数据,反而是报错了,下图就是报错请求本尊 vue里代码如下: this.$http.post('/ge ...
- DPDK Hash Library原理(学习笔记)
0 前言 本文主要翻译至DPDK的官方编程指南,在谷歌翻译的基础上根据自己的理解做了一些修改.网上搜索的很多中文翻译大多是翻译后直接黏贴上来,有时候连语句都读不通.希望本文能够对你有所帮助. 1 介绍 ...
- vscode环境配置(三)——解决控制台终端中文输出乱码
由于系统终端默认编码为GBK,所以需要修改为UTF-8 方法一 打开cmd输入chcp查看编码格式,查看以及修改如下图所示: 方法二