第十五章(I/O(输入/输出))

一.输入/输出流

文件类:File

字节流:InputStream:入 OutputStream:出

字符流:Reader:入 Writer:出

输入流

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

该类中有一些方法

read()

read(byte[] b)

mark(int readlimit)

reset()

skip()

 输出流

二.File类

操作:创建或者删除

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

创建文件对象

new File(String Pathnname)

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

new File(String parent,String child)

new  File(File parent,String child) 

例1:在D盘创建文本文件

import java.io.File;

public class FileTest {

	public static void main(String[] args) {
		File file = new File("D:\\word.txt");//创建文件对象
		if(file.exists()) {//如果该文件存在
			file.delete();//将文件删除
			System.out.println("文件已删除");
		}else {//如果文件不存在
			try {
				file.createNewFile();
				System.out.println("文件已创建");
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
	}
}

结果如下

例2:读取文本文件的名称、长度和隐藏属性

 
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("该文件不存在");
		}
	}
 
}

结果如下

三.文件输入/输出流

例3:向文本文件写入内容,再读取出来

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();
		out.write(by);
		out.close();
		
		//输入字节流
		FileInputStream in = new FileInputStream(file);
		byte[] by1 = new byte[1024];
		int len = in.read(by1);
		System.out.println(new String(by1,0,len));
		in.close();
	}
}

结果如下

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());
			}
		}
		
	}
}

结果如下

例4:使用字符流读写文本文件

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 IOException {
		File file = new File("D:\\word.txt");
		//输出字符流
		FileWriter Writer = new FileWriter(file);
		BufferedWriter bw = new BufferedWriter(Writer);
		Writer.write("申哭哭");
		Writer.close();
		
		//输入字节流
		FileReader in = new FileReader(file);
		char[] ch1 = new char[1024];
		int len = in.read(ch1);
		System.out.println(new String(ch1,0,len));
		in.close();
	}

}

结果如下

四.带缓存的输入/输出流

普通流转换为带缓存的流

1. BufferedInputStream和BufferedOutStream

例5:使用缓冲读写文本文件

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) {
		// TODO Auto-generated method stub
		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;//行数
			while((tmp = br.readLine())!= null) {
				System.out.println("第"+i+"行:"+tmp);//输出读取的内容
				i++;//行数递增
			}
			br.close();//关闭缓冲输入流
			fr.close();//关闭文件字符输入流
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
}

结果如下

//普通流

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();

五.数据输入/输出流

例6:使用数据流读写文本文件

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 DataSteamDemo {

	public static void main(String[] args) throws IOException {
		File file = new File("D:\\word.txt");
		FileOutputStream fos = new FileOutputStream(file);
		DataOutputStream dos = new DataOutputStream(fos);
		dos.writeBoolean(false);
        dos.writeUTF("今天星期三");
		dos.writeDouble(13.25);
		dos.writeInt(9);
		dos.close();
		fos.close();
		
		
		FileInputStream fis = new FileInputStream(file);
		DataInputStream dis = new DataInputStream(fis);
		System.out.println(dis .readBoolean());
        System.out.println(dis .readUTF());
		System.out.println(dis .readDouble());
		System.out.println(dis.readInt());
		dis.close();
		fis.close();
	}
}

结果如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值