第十五章:输入输出流I/O

15.1:输入/输出流

文件类:File

字节流:InputStream:入 OutputStream:出

字符流:Reader:入 Writer:出

15.1.1 输入流

InputStream类是字节输入流的抽象类,所有字节流的父类。该类中所有方法遇到错误会引发IOException异常。

该类中有一些方法

read()

read(byte[] b)

mark(int readlimit)

reset()

skip()

15.1.2 输出流

15.2 File类

操作:创建或者删除

状态:文件是否存在或者隐藏

创建文件对象

new File(String Pathnname)

File file = new File("d:/1.txt")

new File(String parent,String child)

new File(File parent,String child)

15.2.1:文件的创建与删除

package fifteenth;

import java.io.File;

public class FileTest {

public static void main(String[] args) {

// TODO Auto-generated method stub

File file = new File("D:\\word.text");//创建文件对象

if(file.exists()) {//exists:存在

file.delete();//如果该文件存在

System.out.println("文件已删除");//将该文件删除

}else {//如果文件不存在

try {

file.createNewFile();//try语句捕捉可能出现的异常

System.out.println("文件已创建");//创建该文件

}catch(Exception e){

e.printStackTrace();

}

}

}

}

//例题15.1

15.2.2:获取文件信息

package fifteenth;

import java.io.File;

public class FileTest {

public static void main(String[] args) {

// TODO Auto-generated method stub

File file = new File("D:\\word.text");//创建文件对象,两个斜杠是转义字符

if(file.exists()) {//exists:存在

String name = file.getName();//获取文件名称

long length = file.length();//获取文件长度

boolean hidden = file.isHidden();//判断文件是否隐藏

file.delete();//如果该文件存在

System.out.println("文件已删除");//将该文件删除

System.out.println("文件名称:"+name);

System.out.println("文件长度是:"+length);

System.out.println("该文件是隐藏文件吗?"+hidden);

}else {//如果文件不存在

try {

file.createNewFile();//try语句捕捉可能出现的异常:各种问题,处理或者抛出

System.out.println("文件已创建");//创建该文件

}catch(Exception e){

e.printStackTrace();

}

System.out.println("该文件不存在");

}

}

}

//例题15.2

递归算法

package fifteenth;

import java.io.File;

public class File1 {

public static void main(String[] args) {

File file = new File("D:\\xinli");

printAllFiles(file);

}

//在方法里再次调用方法,递归算法

private static void printAllFiles(File file) {

// TODO Auto-generated method stub

File[] files = file.listFiles();

for( File f: files) {

if(f.isDirectory()){

printAllFiles(f);

}else {

System.out.println(f.getName());

}

}

}

}

文件夹加持代码效果

15.3:文件输入/输出流

15.3.1:FileInputStream与FileOutputStream(字节流)

package fifteenth;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

public class FileSteamDemo { // 创建类

public static void main(String[] args) { // 主方法

File file = new File("D:\\word.txt"); // 创建文件对象

try { // 捕捉异常

FileOutputStream out = new FileOutputStream(file); // 创建FileOutputStream对象

byte buy[] = "我有一只小毛驴,我从来也不骑。".getBytes(); // 创建byte型数组

out.write(buy); // 将数组中的信息写入到文件中

out.close(); // 将流关闭

} catch (Exception e) { // catch语句处理异常信息

e.printStackTrace(); // 输出异常信息

}

try {

// 创建FileInputStream类对象

FileInputStream in = new FileInputStream(file);

byte byt[] = new byte[1024]; // 创建byte数组

int len = in.read(byt); // 从文件中读取信息

System.out.println("文件中的信息是:" + new String(byt, 0, len));// 将文件中的信息输出

in.close(); // 关闭流

} catch (Exception e) {

e.printStackTrace();

}

}

}

//例题15.3

package fifteenth;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class FileReaderDemo {

public static void main(String[] args) {

File file = new File("D:\\word.txt"); // 创建文件对象

try {

FileWriter fw = new FileWriter(file); // 创建字符输出流

String word = "明月几时有,把酒问青天。"; // 写入的字符串

fw.write(word); // 将字符串写入到文件中

fw.close(); // 关闭流

} catch (IOException e) {

e.printStackTrace();

}

try {

FileReader fr = new FileReader(file);// 创建字符输入流

char ch[] = new char[1024]; // 缓存字符数组

int len = fr.read(ch); // 将文件中的字符读入到缓存数组中

System.out.println("文件中的信息是:" + new String(ch, 0, len));// 将字符转为字符串输出

fr.close(); // 关闭流

} catch (IOException e) {

e.printStackTrace();

}

}

}//例题15.4

FileOutputStream

package fifteenth;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;//导入需要的类

public class FileStreamDemo {

//写入文件内容,读出来内容

public static void main(String[] args) throws IOException {

File file = new File("D:\\word.txt");//获取文件

FileOutputStream out = new FileOutputStream(file);//对于程序来说是输出

byte[] by = "hello world".getBytes();//创建byte类型的字节类型数组,输入想要的文字或字符

out.write(by);//调用方法,输入

out.close();//关闭输出流,不然会一直占用空间

// TODO Auto-generated method stub

}

}

此代码在控制台不会显示

在文件内显示

FileInputStream

package fifteenth;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;//导入需要的类

public class FileStreamDemo {

//写入文件内容,读出来内容

public static void main(String[] args) throws IOException {

File file = new File("D:\\word.txt");//获取文件

//字节流输出,在文件内显示

FileOutputStream out = new FileOutputStream(file);//对于程序来说是输出

byte[] by = "hello world".getBytes();//创建byte类型的字节类型数组,输入想要的文字或字符

out.write(by);//调用方法,输入

out.close();//关闭输出流,不然会一直占用空间

//字节流输入,在控制台显示

FileInputStream in = new FileInputStream(file);

byte[] by1 = new byte[1024];//1024字节太长,解决方法是指定长度读取并打印

int len = in.read(by1);

System.out.print(new String(by1,0,len));//0和len指代从0号位置开始读取到len位置结束

in.close();//关闭

}

}

15.3.2:FileReader和FileWriter

FileReader

package fifteenth;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class FileReaderDemo {

public static void main(String[] args) throws Exception {

// FileWriter输出 和 输入

File file = new File("D:\\word.txt");//获取文件

//字符流输出,在文件内显示

FileWriter writer = new FileWriter(file);//对于程序来说是输出

char[] ch = new char [] {'z','h'};//创建char类型的字节类型数组,输入想要的文字或字符

writer.write(ch);//调用方法,输入

writer.close();//关闭输出流,不然会一直占用空间

//字符流输入,在控制台显示

FileReader reader = new FileReader(file);

char[] ch1 = new char[1024];//1024字节太长,解决方法是指定长度读取并打印

int len = reader.read(ch1);//读出

System.out.print(new String(ch1,0,len));//0和len指代从0号位置开始读取到len位置结束

reader.close();//关闭

}

}

FileWriter

package fifteenth;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class FileReaderDemo {

public static void main(String[] args) throws Exception {

// FileWriter输出 和 输入

File file = new File("D:\\word.txt");//获取文件

//字符流输出,在文件内显示

FileWriter writer = new FileWriter(file);//对于程序来说是输出

char[] ch = new char [] {'z','h'};//创建char类型的字节类型数组,输入想要的文字或字符

writer.write(ch);//调用方法,输入

writer.close();//关闭输出流,不然会一直占用空间

//字符流输入,在控制台显示

FileReader reader = new FileReader(file);

char[] ch1 = new char[1024];//1024字节太长,解决方法是指定长度读取并打印

int len = reader.read(ch1);//读出

System.out.print(new String(ch1,0,len));//0和len指代从0号位置开始读取到len位置结束

reader.close();//关闭

}

}

15.4:带缓存的输入/输出流

普通流转换为带缓存的流

15.4.1 BufferedInputStream和BufferedOutStream

15.4.2:BufferedWriter和BufferedReader

package fifteenth;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class BufferedDemo {

public static void main(String args[]) {

String content[] = { "好久不见", "最近好吗", "常联系" };// 写入的内容

File file = new File("D:\\word.txt"); // 创建文件对象

try {

FileWriter fw = new FileWriter(file); // 文件字符输出流

BufferedWriter bw = new BufferedWriter(fw); // 换成输出流

for (int k = 0; k < content.length; k++) { // 遍历要输入的内容

bw.write(content[k]); // 写入字符串

bw.newLine(); // 写入一个换行符

}

bw.close(); // 关闭缓冲输出流

fw.close(); // 关闭文件字符输出流

} catch (IOException e) {

e.printStackTrace();

}

try {

FileReader fr = new FileReader(file); // 文件字符输入流

BufferedReader br = new BufferedReader(fr);// 缓冲输入流

String tmp = null; // 作为缓冲的临时字符串

int i = 1; // 行数

// 从文件中读出一行,如果读出的内容不为null,则进入循环

while ((tmp = br.readLine()) != null) {

System.out.println("第" + i + "行:" + tmp); // 输出读取的内容

i++; // 行数递增

}

br.close(); // 关闭缓冲输入流

fr.close(); // 关闭文件字符输入流

} catch (IOException e) {

e.printStackTrace();

}

}

}//例题15.5

//普通流

FileWriter writer = new FileWriter(file);

writer.write("门前大桥下,游过一群鸭");//调用方法,输入

writer.write("快来快来数一数,二四六七八");

writer.write("咕嘎咕嘎,真呀真多呀");

writer.write("数不清到底多少鸭");

//带缓存的流

BufferedWriter bw = new BufferedWriter(writer);

bw.write("门前大桥下,游过一群鸭");//调用方法,输入

bw.newLine();

bw.write("快来快来数一数,二四六七八");

bw.newLine();

bw.write("咕嘎咕嘎,真呀真多呀");

bw.newLine();

bw.write("数不清到底多少鸭");

bw.close();

缓存代码输出

package fifteenth;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class FileReaderDemo {

public static void main(String[] args) throws Exception {

// FileWriter输出 和 输入

File file = new File("D:\\word.txt");//获取文件

//缓存输出,在文件内显示

FileWriter writer = new FileWriter(file);//对于程序来说是输出

//缓存写入,将普通流转换为待缓存的流,进行换行操作

BufferedWriter bw = new BufferedWriter(writer);//传入普通流

//char[] ch = new char [] {'z','h'};创建char类型的字节类型数组,输入想要的文字或字符

//可以传入字符串

bw.write("门前大桥下,游过一群鸭");//调用方法,输入

bw.newLine();

bw.write("快来快来数一数,二四六七八");

bw.newLine();

bw.write("咕嘎咕嘎,真呀真多呀");

bw.newLine();

bw.write("数不清到底多少鸭");

bw.close();

writer.close();//关闭输出流,不然会一直占用空间

//缓存输入,在控制台显示

FileReader reader = new FileReader(file);

BufferedReader br = new BufferedReader(reader);

String s1 = br.readLine();

System.out.println("第一行:"+s1);

System.out.println("第二行:"+br.readLine());

System.out.println("第三行:"+br.readLine());

System.out.println("第四行:"+br.readLine());

reader.close();//关闭

}

}

15.5:数据输入/输出流

package fifteenth;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

public class DataStreamDemo {

public static void main(String[] args) throws IOException {

//输入文件里面

File file = new File("D:\\word.txt");

FileOutputStream isr = new FileOutputStream("gbk");

DataOutputStream zhw = new DataOutputStream(isr);

FileOutputStream fos = new FileOutputStream(file);//先拿到普通字节流,传入参数告诉他往哪里输出

DataOutputStream dos = new DataOutputStream(fos);//转化数据流

dos.writeBoolean(false);

dos.writeUTF("你好世界");//好处是规定类型,text编码集相同就可以显示

dos.writeDouble(88.88);//坏处无法看懂,存入是可以的

dos.close();

fos.close();//乱码

isr.close();

zhw.close();

//输出控制台里面

FileInputStream fis = new FileInputStream(file);

DataInputStream dis = new DataInputStream(fis);

System.out.println(dis.readBoolean());

System.out.println(dis.readUTF());//utf可以读出

System.out.println(dis.readDouble());//read方法无法读出chars

dis.close();

fis.close();

}

}

在此次代码内,代码具有两面性,如果txt文本的编码集和utf编码集适配,就会被写入文件

package fifteenth;

import java.io.*;

public class DateSteamDemo {

public static void main(String[] args) {

File file = new File("D:\\word.txt");

try {

// 创建FileOutputStream对象,指定要向其中写入数据的文件

FileOutputStream fos = new FileOutputStream(file);

// 创建DataOutputStream对象,用来向文件中写入数据

DataOutputStream dos = new DataOutputStream(fos);

dos.writeUTF("使用writeUTF()方法写入数据"); // 将字符串写入文件

dos.writeDouble(19.8); // 将double数据写入文件

dos.writeInt(298); // 将int数据写入文件

dos.writeBoolean(true); // 将boolean数据写入文件

dos.close();

fos.close();

// 创建FileInputStream对象,指定要从中读取数据的文件

FileInputStream fis = new FileInputStream(file);

// 创建DataInputStream对象,用来从文件中读取文件

DataInputStream dis = new DataInputStream(fis);

// 读取字符串

System.out.println("readUTF方法读取数据:" + dis.readUTF());

// 读取double数据

System.out.println("readDouble方法读取数据:" + dis.readDouble());

// 读取int数据

System.out.println("readInt方法读取数据:" + dis.readInt());

// 读取boolean数据

System.out.println("readBoolean方法读取数据:" + dis.readBoolean());

dis.close();

fis.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

//例题15.6

相关推荐
m0_631270403 分钟前
标准C++(二)
开发语言·c++·算法
Zhen (Evan) Wang3 分钟前
What is the new in C#11?
开发语言·c#
0224号比邻星9 分钟前
[C语言]第十节 函数栈帧的创建和销毁一基础知识到高级技巧的全景探索
c语言·开发语言
martian6651 小时前
学懂C++(六十):C++ 11、C++ 14、C++ 17、C++ 20新特性大总结(万字详解大全)
开发语言·c++·c++20
zhangbin_2371 小时前
【Python机器学习】NLP信息提取——命名实体与关系
开发语言·人工智能·python·深度学习·机器学习·自然语言处理
Kerwin要坚持日更2 小时前
Java小白一文讲清Java中集合相关的知识点(九)
java·开发语言
IT规划师4 小时前
C#|.net core 基础 - 值传递 vs 引用传递
c#·.netcore·值传递·引用传递
WZF-Sang4 小时前
Linux权限理解【Shell的理解】【linux权限的概念、管理、切换】【粘滞位理解】
linux·运维·服务器·开发语言·学习
_Power_Y4 小时前
JavaSE:11、内部类
java·开发语言
你可以自己看5 小时前
python的基础语法
开发语言·python