Java之IO流补充
IO流例子
package com.hanqi.maya.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
public class Test3 {
public static void main(String[] args) {
File file=new File("E:\\ceshi.txt");
File ofile=new File("E:\\cewshi8.txt");
Reader r=null;
try {
r=new FileReader(file);
Writer w=new FileWriter(ofile,true);//true表示追加,不加则原本表示替换
BufferedReader br=new BufferedReader(r);
BufferedWriter bw=new BufferedWriter(w);
String s=null;
while((s=br.readLine())!=null){
System.out.print(s);
bw.write(s);
bw.flush();//一个好的编程习惯应该在此处使用flush,写入需要用 flush 刷新流,否则会在缓冲区不写入文件
}
br.close();
bw.close();//调用该方法前会自动调用 flush
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
文件流(字节流, 字符流)
字节流例子
//字节输入流
//读取内容并输出读取多少字节
package com.zijie;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TestFileInputStream
{
public static void main(String[] args) {
int b = 0;
FileInputStream in = null;
try{
in = new FileInputStream("E:\\Java\\0801 流后传 线程\\线程.txt");
} catch(FileNotFoundException e) {
System.out.println("找不到指定的文件");
System.exit(-1);
}
try{
long num = 0;
// 返回-1的话就表示已经读到了文件的结尾
while((b = in.read()) != -1) {
System.out.print((char)b);
num++;
}
in.close();
System.out.println("\n\n共读取了" + num + "个字节");
} catch(IOException e1) {
System.out.println("读取文件时出现异常");
System.exit(-1);
}
}
}
//字节输出流
//复制文件
package com.zijie;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestFileOutputStream {
public static void main(String[] args) {
int b = 0;
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("E:\\Java\\0801 流后传 线程\\线程.txt");
// OutputStream有这个文件就往这个文件里面写, 没有的话就自动创建一个
out = new FileOutputStream("E:\\Java\\0801 流后传 线程\\线程-ceshi.txt");
// 一边读, 一边写
while ((b = in.read()) != -1) {
out.write(b);
}
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
System.exit(-1);
} catch (IOException e) {
System.out.println("文件复制出错");
System.exit(-1);
}
System.out.println("文件成功复制");
}
}
字符流例子
//字符输入流
//读取文件内容
package com.zifu;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestFileReader {
public static void main(String[] args) {
FileReader fr = null;
int c = 0;
try {
fr = new FileReader("E:\\Java\\0801 流后传 线程\\线程.txt");
while ((c = fr.read()) != -1) {
System.out.print((char) c);
}
fr.close();
} catch (FileNotFoundException e) {
System.out.println("文件未找到");
System.exit(-1);
} catch (IOException e) {
System.out.println("读取文件时出现异常");
System.exit(-1);
}
}
}
//字符输入流
//不断写入int型,写入为ASCII表
package com.zifu;
import java.io.FileWriter;
import java.io.IOException;
public class TestFileWriter {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("E:\\Java\\0801 流后传 线程\\线程-ceshi1.txt");
for (int i = 1; i <= 50000; i++) {
fw.write(i);
}
} catch (IOException e) {
System.out.println("写入文件出错 !");
System.exit(-1);
}
}
}
缓冲流
package com.buffer;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TestBufferStream {
public static void main(String[] args) {
byte[] bb = new byte[50];
try {
FileInputStream fis = new FileInputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt");
BufferedInputStream bis = new BufferedInputStream(fis);//将文件字节流,转换成带缓冲的输入字节流
int c = 0;
System.out.println((char)bis.read());
System.out.println((char)bis.read());
/* while((c = bis.read()) != -1) {
System.out.print((char)c+", ");
}*/
// 标记到第30的位置再开始读数据
bis.mark(100);//见的总承包 mark的方法 InputStream
for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) {
System.out.print((char)c);
}
System.out.println();
// 回到mark标记的那个地方
bis.reset();//见的总承包reset的方法InputStream 。
for (int i = 0; i <= 10 && (c = bis.read()) != -1; i++) {
System.out.print((char)c);
}
bis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.buffer;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TestBufferRW {
public static void main(String[] args) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\Java\\0801 流后传 线程\\ceshi.txt"));
BufferedReader br = new BufferedReader(new FileReader("E:\\Java\\0801 流后传 线程\\ceshi.txt"));
String s = null;
for (int i = 0; i < 100; i++) {
s = "" + Math.random();
//bw.write(s);
bw.append(s);//写入文件
bw.newLine();
}
bw.flush();
// 特别好用的方法, readLine
while((s = br.readLine()) != null) {//获取文件内容输出到控制台
System.out.println(s);
}
br.close();
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
转换流 convert--->字节-字符
打印当前系统的字符编码:
System.out.println(osw.getEncoding());
package com.convert;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
public class TestTranForm1 {
public static void main(String[] args) {
OutputStreamWriter osw = null;
try {
osw = new OutputStreamWriter(new FileOutputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt"));
osw.write("山东淄博");//写入文件
// 默认使用当前系统的字符编码
System.out.println(osw.getEncoding());
osw.close();
// FileOutputStream加第二个参数true表示追加内容
osw = new OutputStreamWriter(new FileOutputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt", true), "utf-8");//更改字符编码
osw.write("qwerttttt");
System.out.println(osw.getEncoding());
osw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
阻塞式方法
获取输入的内容转换成大写,如果输入的 exit 退出
package com.convert;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestTranForm2 {
public static void main(String[] args) {
try {
InputStreamReader isr = new InputStreamReader(System.in);//包一层字符流
BufferedReader br = new BufferedReader(isr);//在包一层缓冲字符流
String s = null;
s = br.readLine();//从字符流读取一行,你写入的内容
while(s != null) {
if(s.equalsIgnoreCase("exit")) {//忽略大小写的相同
break;
}
System.out.println(s.toUpperCase());//将字符串转换成大写在控制台输出
s = br.readLine();//再次获取输入的内容
}
br.close();
// 阻塞式方法(同步方法---不输入就不能干别的)
} catch (IOException e) {
e.printStackTrace();
}
}
}
数据流--->八大数据类型
package com.data;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class TestDataStream {
public static void main(String[] args) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();//字节数组输出流
DataOutputStream dos = new DataOutputStream(baos);//数据处理流,这个流可以直接写入基础数据类型
try {
dos.writeDouble(Math.random());
dos.writeBoolean(true);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());//将输出流转换为字节数组
System.out.println(bais.available());//里面包含的所有数据的长度
DataInputStream dis = new DataInputStream(bais);
/*
* 先进先出---队列
* 先进后出---栈
*/
System.out.println(dis.readDouble());//数据流可以直接读取基本数据类型
System.out.println(dis.readBoolean());
dos.close();
dis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
print流 打印流--->System.out.println();
package com.print;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class TestPrintStream1 {
public static void main(String[] args) {
PrintStream ps = null;//打印流
try {
FileOutputStream fos = new FileOutputStream("e:\\go\\testprint.txt");//文件字节输出流
ps = new PrintStream(fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if(ps != null) {
// 设置默认的输出对象
System.setOut(ps);
}
for(char c = 0;c<=60000;c++) {//输出6万个字符
System.out.print(c);
if(c % 100 == 0) {//输出到文件,不是控制台
System.out.println();
}
}
}
}
定义方法,读取并打印文件
package com.print;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
public class TestPrintStream2 {
public static void main(String[] args) {
String fileName = "e:\\go\\file.txt";
list(fileName, System.out);
}
private static void list(String fileName, PrintStream ps) {
try {
BufferedReader br = new BufferedReader(new FileReader(fileName));//读取文件
String s = null;
while((s = br.readLine()) != null) {
ps.println(s);//读取并打印
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
ps.println("无法读取文件 !");
e.printStackTrace();
}
}
}
模拟日志效果
输入内容,打印,并用分割线分开,最后打印当前日期
package com.print;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Date;
public class TestPrintStream3 {
public static void main(String[] args) {
String s = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//字节流转换字符流
PrintWriter pwLog;
try {
FileWriter fw = new FileWriter("e:\\Java\\Ceshi-stream.log", true);//输出流的位置追加内容
pwLog = new PrintWriter(fw);
while((s = br.readLine()) != null) {//获取输入
if(s.equalsIgnoreCase("exit")) {
break;
}
System.out.println(s.toUpperCase());//打印到控制台大写
pwLog.println("---------------------");//打印到文件分割线
pwLog.println(s.toUpperCase());//打印到文件大写
pwLog.flush();
}
pwLog.println("========== " + new Date() + " ===================");//结束后打印当前日期
pwLog.flush();
pwLog.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Object流
package com.object;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class TestObjectStream {
public static void main(String[] args) {
try {
Test t = new Test();//实例化,自定义的类
t.i += 5;
FileOutputStream fos = new FileOutputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt");//定义输出位置
ObjectOutputStream oos = new ObjectOutputStream(fos);//对象处理流包起来
oos.writeObject(t);//将对象写入到文件
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream("E:\\Java\\0801 流后传 线程\\ceshi.txt");//将文件读出来
ObjectInputStream ois = new ObjectInputStream(fis);
Test tread = (Test)ois.readObject();
System.out.println(tread);
ois.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// Serializable--标记型接口, 没有实际的方法, 知识用来表示这个类可以被序列化
class Test implements Serializable {
private static final long serialVersionUID = 1L;
String name = "hanqi";
int i = 3;
int j = 15;
transient double d = 12.345; // 透明的, 表示这个属性在写入流的时候不予考虑
@Override
public String toString() {
return "Test [name=" + name + ", i=" + i + ", j=" + j + ", d=" + d + "]";
}
}
Java之IO流补充的更多相关文章
- Java基础-IO流对象之字符类(FileWrite与FileReader)
Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...
- 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 ...
随机推荐
- Vue按需加载提升用户体验
Vue官方文档异步组件: 在大型应用中,我们可能需要将应用拆分为多个小模块,按需从服务器下载.为了让事情更简单, Vue.js 允许将组件定义为一个工厂函数,动态地解析组件的定义.Vue.js 只在组 ...
- ubuntu16.04-x64系统中Jexus web server部署.NetCore和端口分析引发的猜想!
您有这样的牢骚么? 有一周没更新博客了,简单说下在干什么吧:主要是公司安排对接某旅游大公司的接口,接口数量倒也就10个左右,对接完后还需要加入到业务系统中和App端,因此还是需要花点时间的:时间上来说 ...
- RabbitMQ~开篇与环境部署
想写这篇文章很久了,今天终于有时间总结一下,一个大型的系统里,消息中间件是必不可少的,它将并发环境处理的数据异步进行处理,有效的提高了系统的并发能力,有很多系统的瓶颈点都在于此,而消息中间件在这个时候 ...
- 谈谈java中遍历Map的几种方法
java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...
- $.Deferred 延迟对象
一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们 ...
- dubbo与zookeeper的关系
Dubbo建议使用Zookeeper作为服务的注册中心. 1. Zookeeper的作用: zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知道,简单来说就是 ...
- python连接impala(安装impyla)
相关环境如下: Python3.4 Win7 64位 参照官网https://github.com/cloudera/impyla中的安装步骤执行: 1.pip install six 2.pip i ...
- Js作用域&作用域链
js构建类 一 构建类的原则 构造函数 等于 原型的constructor //构造函数 function Hero(name,skill){ this.name = name; this.skill ...
- Ext ApplicationController&ref的使用
Ext ApplicationController&ref的使用 Ext.define('app.controller.ApplicationController', { //继承 Ext.a ...
- ubuntu12.0.4安装启动后无法进入图形操作界面
在VMware10.0.4虚拟机上安装ubuntu12.0.4版本后,启动linux后,无法进入图形界面,但是可以进入字符界面.通过查阅网上资料,有人说是VMware的3D图形加速没有关闭,于是通过查 ...