java获取标准输出到文件_IO java标准输入与输出
1.文件输出流 (java IO简介)
/*** java io 标准的输入与输出
* 使用java IO我们可以对外界设备已相同的方式进行
* 读写完成数据交换.
*
* java IO将"读"与"写"按照方向进行了划分:
* 输入:从外界到程序的方向,用于让程序获取外界数据因此输入是"读"数据的操作
* 输出:从程序到外界的方向,用于将数据"写"出的操作.
*
* java IO以"流"的形式表示读写功能
* java.io.InputStream 输入流,通过输入流我们可以
* 连接上外界设备从而读取该设备数据
* java.io.OutputStream 输出流
* 以上两个流是所有字节输入流与输出流的超类,规定了
* 所有输入流与输出流的基本读写功能.
*
* java将流分为两大类:节点流与处理流
*
* 节点流:又称为"低级流",是真实连接程序与数据源的
* "管道",用于实际搬运数据的流. 读写一定是建立在
* 节点流的基础上进行的.
*
* 处理流:又称为"高级流",高级流不能独立存在,必须
* 连接在其他流上,目的是当数据流经当前流时对其做
* 某些加工处理,简化我们读写数据时的相应操作.
*
* 实际使用IO时,我们通常会串联若干的高级流最终连接
* 到低级流上,使得读写数据以流水线式的加工处理完成,
* 这个操作称为"流的连接",也是IO的精髓所在
* 文件流
* 文件流是一对低级流,作用是连接到文件上,用于读写
* 文件数据.
* java.io.FileOutputStream:文件输出流
* java.io.FileInputStream:文件输入流*/
public classFOSDemo {public static void main(String[] args) throwsIOException {/** 文件流提供的构造方法:
* FileOutputStream(File file)
* FileOutputStream(String path)
* 以上两种创建方式,默认为覆盖写模式,即:
* 若指定的文件已经存在,那么会将该文件原有
* 数据全部删除.然后再将新数据写入文件.
*
* FileOutputStream(File file,boolean append)
* FileOutputStream(String path,boolean append)
* 以上两种构造器允许再传入一个boolean值类型的
* 参数,如果该值为true时,文件输出流就是追加写模式
* 即:数据中原有数据都保留,新内容会被追加到文件末尾
* 文件流与RAF的区别:
* RAF是基于指针的随机读写形式,可以对文件任意
* 位置进行读或写操作,可以做到对文件部分数据
* 覆盖等操作.读写更灵活.
*
* 文件流是基于java IO的标准读写,而IO是顺序
* 读写模式,即:只能向后写或读数据,不能回退.
*
* 单从读写灵活度来讲RAF是优于文件流的,但是
* 文件流可以基于java IO的流连接完成一个复杂
* 数据的读写,这是RAF不容易做到的.*/FileOutputStream fos= new FileOutputStream("./fos.txt",true);//String line = "回首,掏~";//fos.write(line.getBytes("UTF-8"));//fos.write("鬼刀一开看不见~走位~走位~".getBytes("UTF-8"));
fos.write("手".getBytes("UTF-8"));
System.out.println("写出完毕!");
fos.close();
}
}
2.文件输入流
/*** 文件输入流,用于从文件中读取数据*/
public classFISDemo {public static void main(String[] args) throwsIOException {
FileInputStream fis= new FileInputStream("fos.txt");byte[] data = new byte[1000];int len =fis.read(data);
String str= new String(data,0,len,"UTF-8");
System.out.println(str);
fis.close();
}
}
3.文件复制(字节块)
/*** 使用文件流完成文件的复制工作*/
public classCopyDemo {public static void main(String[] args) throwsIOException {/** 1:创建文件输入流读取原文件
* 2:创建文件输出流用于写复制文件
* 3:循环从原文件读取字节写入到复制文件中
* 4:关闭两个流*/FileInputStream fis= new FileInputStream("movie.mp4");
FileOutputStream fos= new FileOutputStream("movie_cp.mp4");int len = -1;//记录每次实际读取的字节量
byte[] data = new byte[1024*10];while((len = fis.read(data))!=-1) {
fos.write(data,0,len);
}
System.out.println("复制完毕!");
fos.close();
fis.close();
}
}
4.缓冲流
/*** 缓冲流
* java.io.BufferedOutputStream
* java.io.BufferedInputStream
*
* 缓冲流是一对高级流,在流连接中的作用是提高读写效率
* 使得我们在进行读写操作时用单字节读写也能提高读写的效率.
*
* 缓冲流之所以可以提高读写效率,是因为缓冲流内部有
* 一个缓冲区(一个字节数组),无论我们使用缓冲流进行
* 何种读写(单字节或块读写)最终都会被缓冲流转换为
* 块读写来提高效率*/
public classCopyDemo2 {public static void main(String[] args) throwsIOException {
FileInputStream fis= new FileInputStream("music.mp3");
BufferedInputStream bis= newBufferedInputStream(fis);
FileOutputStream fos= new FileOutputStream("music_cp2.mp3");
BufferedOutputStream bos= newBufferedOutputStream(fos);int d = -1;while((d = bis.read())!=-1) {
bos.write(d);
}
System.out.println("复制完毕!");
bis.close();
bos.close();
}
}
5.缓冲输出流的缓冲区
/*** 缓冲输出流的缓冲区问题*/
public classBOS_flush {public static void main(String[] args) throwsIOException {
FileOutputStream fos= new FileOutputStream("bos.txt");
BufferedOutputStream bos= newBufferedOutputStream(fos);
bos.write("摩擦摩擦~是魔鬼的步伐~".getBytes("UTF-8"));/** void flush()
* flush方法是OutputStream中定义的方法,
* 所有的输出流都具有该方法,但是只有缓冲
* 流的该方法有实际意义.其他的流具有该方法
* 的目的是在流连接中传递缓冲操作给缓冲流
*
* flush的作用是将缓冲流中已经缓存的数据一次性写出.
* 频繁的调用flush方法会提高写出的次数从而
* 降低写出效率,但是能保证数据写出的即时性.*/
//bos.flush();
System.out.println("写出完毕!");
bos.close();
}
}
6.对象输出流
/*** 对象流
* java.io.ObjectOutputStream
* java.io.ObjectInputStream
*
* 对象流是一对高级流,在流连接中的作用是方便读写
* java对象.(对象与字节的转换由对象流完成)*/
public classOOSDemo {public static void main(String[] args) throwsIOException {/** 将一个Person实例写入文件person.obj中*/String name= "苍老师";int age = 18;
String gender= "女";
String[] otherInfo= {"是一名演员","爱好是写毛笔字","生了一对双胞胎","促进中日文化交流"};
Person p= newPerson(name, age, gender, otherInfo);
FileOutputStream fos= new FileOutputStream("person.obj");
ObjectOutputStream oos= newObjectOutputStream(fos);/** 该方法可能抛出:NotSerializableException
* 当写出的对象所属的类没有实现Serializable接口
* 时就会抛出该异常.
*
* 写入文件后发现该文件的实际数据量比当前对象
* 保存的内容要大,这是因为这组字节除了包含了
* 该对象的数据外还有这个对象的结构信息.*/oos.writeObject(p);
System.out.println("写出完毕!");
oos.close();
}
}
7.对象输入流
/*** 对象输入流*/
public classOISDemo {public static void main(String[] args) throwsIOException, ClassNotFoundException {/** 将person.obj文件中的对象读取出来*/FileInputStream fis= new FileInputStream("person.obj");
ObjectInputStream ois= newObjectInputStream(fis);
Person p=(Person)ois.readObject();
System.out.println(p);
ois.close();
}
}
8.字符输出转换流
/*** 字符流
* java.io.Reader和java.io.Writer
* 上述两个类是所有字符流的超类,规定了所有字符流都
* 必须具备的读写字符的相关方法.
*
* java将流按照读写单位划分为字节流与字符流
* 字符流以char为单位读写数据,但是底层本身还是读写
* 字节,只是字符与字节的转换字符流自行完成.
*
* 转换流
* java.io.InputStreamReader
* java.io.OutputStreamWriter
* 转换流是一对字符流,同时他们也是高级流,在实际开发
* 时我们通常不会直接操作这两个流,但是在读写文本数据
* 时,流连接中他们是非常重要的一环.负责衔接其他字符
* 高级流与字节流.*/
public classOSWDemo {public static void main(String[] args) throwsIOException {
FileOutputStream fos= new FileOutputStream("osw.txt");/** 转换流在创建时通常会传入第二个参数,这个
* 参数用来指定字符集,这样一来通过当前流写
* 出的文本数据都会按照该字符集转换为字节后
* 写出.*/OutputStreamWriter osw= new OutputStreamWriter(fos,"UTF-8");
osw.write("和我在成都的街头走一走~");
osw.write("直到所有的灯都熄灭了也不停留.");
System.out.println("写出完毕!");
osw.close();
}
}
9.字符输入转换流
/*** 使用转换流读取文本数据*/
public classISRDemo {public static void main(String[] args) throwsIOException {//RandomAccessFile raf = new RandomAccessFile("osw.txt","r");//byte[] data = new byte[(int)raf.length()];//raf.read(data);//String str = new String(data,"UTF-8");//System.out.println(str);//raf.close();//FileInputStream fis = new FileInputStream("osw.txt");//byte[] data = new byte[1000];//int len = fis.read(data);//String str = new String(data,0,len,"UTF-8");//System.out.println(str);//fis.close();
FileInputStream fis= new FileInputStream("osw.txt");
InputStreamReader isr= new InputStreamReader(fis,"UTF-8");//char[] data = new char[100];//int len = isr.read(data);//String str = new String(data,0,len);//System.out.println(str);
int d = -1;while((d = isr.read())!=-1) {//可以一次读一个字符
System.out.print((char)d);
}
isr.close();
}
}
10.缓冲字符输入流
/*** 缓冲字符输入流
* java.io.BufferedReader
* 块读文本数据,并且可以按行读取字符串.*/
public classBRDemo {public static void main(String[] args) throwsIOException {/** 将当前源代码内容输出到控制台*/FileInputStream fis= new FileInputStream("./src/io/BRDemo.java");
InputStreamReader isr= newInputStreamReader(fis);
BufferedReader br= newBufferedReader(isr);/** String readLine()
* 连续读取若干字符直到读取到换行符
* 为止,将换行符之前的字符组成一个字符
* 串返回.如果返回值为null,表示流读取到末尾了.*/String line= null;while((line = br.readLine())!=null) {
System.out.println(line);
}
br.close();
}
}
11.缓冲字符输出流
/*** 缓冲字符流
* java.io.BufferedWriter
* java.io.BufferedReader
* 缓冲流是块读写文本数据,提高读写效率.并且
* 可以按行读写字符串.
*
* java.io.PrintWriter具有自动行刷新的缓冲
* 字符输出流,内部总是连接BufferedWriter作为
* 其缓冲加速操作.*/
public classPWDemo1 {public static void main(String[] args) throwsIOException {/** 向pw.txt文件中写入字符串
* 该构造方法内部会自动进行流连接操作,
* 分别连接缓冲字符流,转换流和文件流.*/PrintWriter pw= new PrintWriter("pw.txt","UTF-8");
pw.println("让我掉下眼泪的,不止昨夜的酒.");
pw.println("让我依依不舍的,不止你的温柔.");
System.out.println("写出完毕!");
pw.close();
}
}
/*** 自行完成流连接使用PW写出文本数据*/
public classPWDemo2 {public static void main(String[] args) throwsIOException {
FileOutputStream fos= new FileOutputStream("pw2.txt");
OutputStreamWriter osw= new OutputStreamWriter(fos,"UTF-8");
BufferedWriter bw= newBufferedWriter(osw);
PrintWriter pw= newPrintWriter(bw);
pw.println("");
System.out.println("写出完毕!");
pw.close();
}
}
12.IO流图解
13.IO流综合应用
/*** 实现简易记事本工具
* 程序启动后,要求输入文件名,然后对文件写内容.
* 将后续在控制台输入的每行字符串都按行写入到
* 该文件中,当单独输入了exit时,程序退出.
*
* 要求:自行使用流连接创建PW*/
public classPWDemo3 {public static void main(String[] args) throwsIOException {
Scanner scanner= newScanner(System.in);
System.out.println("请输入文件名:");
String fileName=scanner.nextLine();
FileOutputStream fos= newFileOutputStream(fileName);
OutputStreamWriter osw= new OutputStreamWriter(fos,"UTF-8");
BufferedWriter bw= newBufferedWriter(osw);/** 创建PrintWriter时使用的构造方法如
* 过第一个参数是一个流,那么就支持第
* 二个参数,这个参数是一个boolean值,
* 该值为true时就打开了自动行刷新功能
* 此时每当调用println方法写出一行字符
* 串都会自动flush.*/PrintWriter pw= new PrintWriter(bw,true);
System.out.println("请开始输入内容:");while(true) {
String line=scanner.nextLine();if("exit".equals(line)) {break;
}
pw.println(line);
}
System.out.println("再见!");
pw.close();
}
}
java获取标准输出到文件_IO java标准输入与输出相关推荐
- java 获取classpath下文件多种方式
java 获取classpath下文件多种方式 一:properties下配置 在resources下定义server.properties register.jks.path=classpath\: ...
- java 获取上传文件的格式_js和java获取上传文件的文件名以及上传文件格式判断...
js获取文件名: //校验 function check(){ var fileType = $("#template").val(); //判断后缀是不是需要的文件类型 if(f ...
- Java获取静态资源文件路径
Java获取静态资源文件路径 开发中经常会有文件相关的操作,比如说文件的查找,文件的存储.但是在使用中往往会因为路径问题耽误大量的开发时间.在实际中常常通过File file = new File ...
- java获取ftp服务器文件,java获取ftp服务器文件
java获取ftp服务器文件 [2021-02-05 07:26:23] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(" ...
- java解压服务器文件夹,java获取远程服务器上的文件夹
java获取远程服务器上的文件夹 内容精选 换一换 安装X722板载网卡驱动软件包,使裸金属服务器支持在v5服务器上下发.其他类型服务器可跳过此步骤.本文以Windows Server 2016为例, ...
- java 获取服务器上文件,java获取远程服务器上的文件
java获取远程服务器上的文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei J ...
- Java 获取opus 音频文件时长
当时为了获取时长花费好长时间,所以现在写出这文章以免后面有遇到该问题不止如何解决花费太长时间.话不多说,上代码 需要的依赖包有 <!-- https://mvnrepository.com/ar ...
- java 获取本机信息,使用Java获取系统信息的常用代码整理总结
1.获取CPU和内存信息 ? 2.获取本机的IP地址: ? 3.获得网卡地址 ? 4.获得操作系统帐号 ? 5.获得操作系统版本 ? 6.一些常用的信息获得方式整理 java.version J ...
- java获取电脑配置_使用Java获取cao作系统和硬件信息
距离上一次写博客已经过去2个半的月份了,也是工作忙,也是懒,也是在积攒文章吧,反正就是许久没有写了,本次分享一个用Java获取cao作系统和硬件信息的组件,在十一假期之前就准备分享的,然这些详细的参数 ...
最新文章
- C++两个 delete 后的问题 野指针
- 【HDOJ】2577 How to Type
- Python基础(14)_python模块之configparser模块、suprocess
- 链路追踪_springcloud-第九回 链路追踪Sleuth
- linux virtualhost不能正常运行,造成网站无法正常运行的4个原因!
- c语言中将整数转换成字符串_在C语言中将ASCII字符串(char [])转换为十六进制字符串(char [])...
- MySQL呕血汇总--从基础到毕业【收藏篇】
- Ubuntu 12.10方便操作套件
- 项目实战 五 拟合直线 获得中线
- 电力、电气、电工知识汇总
- Navicat15注册时报错 rsa public key not find
- 北京思科CCNP和思科 CCIE考试常见问题GRE虚拟专用网络详解
- 谷歌浏览器如何使用访客模式 谷歌浏览器使用访客模式的方法
- linux卸载usb声卡,Linux alsa 声卡驱动 安装 卸载 设置默认声卡
- python numpy 函数_Python 入门教程:关于 numpy 窗函数 Blackman
- 21-selenium之options模块
- 【Linux】FirefoxBrowser 火狐浏览器安装 FlashPlayer 插件
- 咦?智能颈部按摩仪还能语音播报,快搞起来!
- 51NOD 2370 奈芙莲的护符
- 有想法阿里系工作的么?各个事业群,都可以挑选。
热门文章
- STM32工作笔记003---认识了解RTOS系统
- VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法
- vc 2010 下打包dll 的问题
- JSP页面是否需要重新编译--checkInterval
- cannot enable both sham-link state-change interface traps
- c语言冒泡例子,C语言排序实例(选择、冒泡、插入、折半、快速)
- linux下的C语言开发(ATT 汇编语言)
- java xml binding_JAXB(Java Architecture for XML Binding)
- c语言学生综合测评系统_综合测评线上系统帮助文档
- mongodb java 单例_JAVA单例MongoDB工具类详解