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 ...
随机推荐
- 从《海贼王》的视角走进BAT的世界(百度/阿里/腾讯)
在伟大航路后半段--新世界,有三位君临天下的海上枭雄,就犹如海上皇帝一般,被人们称为"三皇",他们是--洛宾·里(Robin·Li),杰克·马(Jack·Ma)和波尼(pony)! ...
- Hibernate入门(四)
一 Hibernate缓存 缓存是介于应用程序和数据库之间,对数据库中的数据复制一份到缓存中,其作用就是为了减少应用程序对数据库的访问,访问数据库时先从缓存中取,提高了程序的性能.Hibernate缓 ...
- Linux命令 查看及修改文件属性
chmod [功能说明] 改变文件的访问权限 #Linux中访问权限分为:文件属主(文件的创建者)文件组属主(创建者所处的组)和其他(其他用户) [语法格式] Chmod[参数]mode[文件名或目 ...
- WCF学习——构建一个简单的WCF应用(一)
本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些准备开始学习WCF的初学者提供一些帮助. 在这个例子中,我们将实现一个简单的计算器和传统的分布式通信框架一样,WC ...
- vue2.0实现分页组件
最近使用vue2.0重构项目, 需要实现一个分页的表格, 没有找到合适的组件, 就自己写了一个, 效果如下: 该项目是使用 vue-cli搭建的, 如果你的项目中没有使用webpack,请根据代码自己 ...
- select onchagnge 弹出自己的文本值
select onchagnge 弹出自己的文本值onchange='alert($("option:selected",this).text())'
- mysql清除数据库中字符串空格方法
update `z_lottery_list` set `win_number`=replace(`win_number`,' ','');
- JAVA程序员成长历程(二)
提几个方向可以去尝试下: 1.订阅一些牛人的博客,这里面包括技术,学习,生活等等.不一定学技术,他们的经验都会让人受益匪浅. 我经常看的: 唐巧,IOS程序员.http://blog.devtang. ...
- 【LeetCode】49. Group Anagrams
题目: Given an array of strings, group anagrams together. For example, given: ["eat", " ...
- Latex加速: TexStudio的安装和使用
TexStudio可以加速Latex的编辑和写作,这里简单介绍一下TexStudio的安装,配置和使用.但是有一个重要的前提,TexStudio会使Latex源代码和pdf文件并排显示,比较占用桌面的 ...