Java第十五章

 

15.1输入/输出流

流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。

I/0 (Imput/Output,输入/输出》流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。Java 有数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据,输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据把信息传递到目的地,。输出流的目标可以是文件、网络、压缩包、控制台和其他数据输出目标。

15.1.1输入流

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

  • read()方法:从输入流中读取数据的下一个字节。返回0~255的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回值为-1。
  • read(byte[] b)方法:从输入流中读入一定的长度个字节,并以整数的形式返回字节数。
  • mark(int readlimit)方法:在输入流的当前位置放置一个标记,readlimit 参数告知此输入流在标记位置失败之前允许读取的字节数。
  • reset()方法:将输入指针返回到当前所做的标记处。
  • skip(long n)方法:跳过输入流上的n个字节并返回实际跳过的字节数。
  • markSupported()方法:如果当前流支持 mark()/reset()操作就返回true。
  • close()方法:关闭此输入流并释放与该流关联的所有系统资源。

    15.2.2输出流

    OutputStream 类是字节输出流的抽象类,此抽象类是表示输出字节流的所有类的超类。 OutputStream 类中的所有方法均返回 void,在遇到错误时会引发 IOException 异常 。

  • write(int b)方法:将指定的字节写入此输入流
  • write(byte[] b)方法:将b个字节从指定的byte数组写入此输入流
  • write(byte[] b,int off,int len)方法:将指定byte数组中从偏移量 off 开始的 len 个字节写入此输出流
  • flush()方法:彻底完成输出并清空缓存区。
  • close() 方法:关闭输出流 
  • Writer 类是字符输出流的抽象类,所有字符输出类的实现都是它的子类。

5.2 File类

15.2.1文件的创建与删除

 

1、File(String pathname)

该构造方法通过将给定的路径名字符串转换为抽象路径名来创建一个新 File 实例。语法如下:

new File(String pathname)

2、 File(String parent,String child)

该构造方法定义的父路径和子路径字符串(包含文件名)创建一个新的 File 对象。语法如下:

new  File(String parent,String child)

3、 File( Filef,String child)

该构造方法根据f抽象路径名和child路径名字符串创建一个新年 File 实例。语法如下:

new File( Filef,String child)

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 {//try语句块捕捉可能出现的异常
			file.createNewFile();//创建该文件
			System.out.println("文件已创建");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	}
}

 D盘有word.txt文件,输出内容:文件已删除 

 

D盘没有word.txt文件,输出内容:文件已创建,并自动创建了word.tet文件  

15.2.2获取文件信息

File类的常用方法

方法    返回值    说明
getName()    String    获取文件的名称
canRead()    boolean    判断文件是否为可读的
canWrite()    boolean    判断文件是否可被写入
exits()    boolean    判断文件是否存在
length()    long    获取文件的长度(以字节为单位)
getAbsolutePath()    String    获取文件的绝对路径
getParent()    String    获取文件的父路径
isFile()    boolean    判断抽象路径名表示的文件是否为一个标准文件
isDirectory()    boolean    判断文件是否为一个目录
isHidden()    boolean    判断文件是否为隐藏文件
lastModified()    long    获取文件的最后修改时间

import java.io.File;
public class GroupDemo {
 
	public static void main(String[] args) {
		File file=new File("D:\\WORD.TXT");//创建文件对象
		if(file.exists()) {//如果该文件存在
			String name=file.getName();//获取文件名称
			long length=file.length();//获取文件长度
			boolean hidden=file.isHidden();//判断文件是否为隐藏文件
			System.out.println("文件名称:"+name);//输出信息
			System.out.println("文件长度是:"+length);
			System.out.println("该文件是隐藏文件吗?:"+hidden);
		}else {//如果文件不存在
			System.out.println("该文件不存在");//输出信息
		}
	}
}

import java.io.File;
public class GroupDemo {//创建类
	public static void main(String[] args) {//主方法
		File file=new File("D:\\丑丑");//创建对象
		printAllFile(file);
	}
	public static void printAllFile(File foldersPc) {
		for(File fileEntry:foldersPc.listFiles()) {
			if(fileEntry.isDirectory()) {
			System.out.println("--------"+fileEntry.getName()+"--------");
			printAllFile(fileEntry);
		}else {
			System.out.println(fileEntry.getName());
		}
	}
}
}

 

15.3文件输入/输出流

程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失。如果需要将数据永久保存,可使用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存文件中。

 

15.3文件输入/输出流

程序运行期间,大部分数据都在内存中进行操作,当程序结束或关闭时,这些数据将消失。如果需要将数据永久保存,可使用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存文件中。

 FileInputStream 类常用的构造方法:

FileInputStream(String name)

FileInputStream(File file)

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class FileStreamDemo {
 
	private static final String file = null;
	public static void main(String[] args) throws IOException {
		File file=new File("D:\\word.txt");
		//输出字节流
		FileOutputStream out=new FileOutputStream(file);
		byte[] by="hello word".getBytes();//写入内容的字节数组
		out.write(by);//将字节写入文件中
		out.close();
	
	//输入字节流
	FileInputStream in=new FileInputStream(file);
	byte[] by1=new byte[1024];
	int len=in.read(by1);//将文件信息读入缓存数组中
	System.out.print(new String(by1,0,len));//将字节转为字符串输出
	in.close();//关闭流
 
}
}

15.3.2FileReader和FileWriter类

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class GroupDemo {
 
	public static void main(String[] args) throws IOException {
		File file=new File("D:\\word.txt");
		//输出的字符流
		FileWriter writer=new FileWriter(file);//创建字符输出流
		writer.write("门前大桥下 游过一群鸭");//将字符串写入文件中
		writer.close();
		
		//输入的字符流
		FileReader reader=new FileReader(file);//创建字符输入流
		char[] ch1=new char[1024];//缓存字符数组
		int len=reader.read(ch1);//将文件中的字符读入缓存数组中
		System.out.println(new String(ch1,0,len));//将字符转为字符串输出
		reader.close();//关闭流
	}
}

 

15.4带缓存的输入/输出流

缓存时 I/O 的一种性能优化。缓存流为 I/O 流增加了内存缓存区,使得再流上执行 skip()、mark()、和 reset()方法成为可能。

15.4.1 BufferedInputSteram与BufferedOutputSteram

 

15.4.2 BufferedReader与BufferedWriter类

BufferedReader 类与 BufferedWriter 类分别继承 Reader 与 Writer 类。这两个类同时具有内部缓存机制,并能够以行单位进行输入/输出。

 BufferedReader 类常用的方法如下: 

  • read()方法:读取单个字符
  • readLine()方法:读取一个文本行,并将其返回为字符串。若无数据可读,返回null。

BufferedWriter 类中的方法都返回void。常用的方法如下:

  • write(String s,int off,int len)方法:写入字符串的某一部分
  • flush()方法:刷新该流的缓存
  • newLine()方法:写入一个行分隔符
    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 FileTest {
    	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;//行数
    		while((tmp=br.readLine())!=null) {
    			System.out.println("第"+i+"行"+tmp);//输出读取的内容
    			i++;//行数递增
    		}
    			br.close();//关闭缓冲输入流
    			fr.close();/关闭文件字符输入流
    		}catch(IOException e) {
    			e.printStackTrace();
    		}
    	}
    }

15.5数据输入/输出流

数据输入/输出流 (DataInputStream 类与 DataOutputStream 类)允许应用程序以与机器无关的方式从底层输入流中读取基本 Java 数据类型。也就是说,当读取一个数据时,不必关心这个数值应当是哪个字节。

  DataInputStream 类提供了将字符串、double 数据、int 数据、Boolean 数据写入文件的方法;DataOutputStream 类只提供了一个readUTF()方法返回字符串。

 DataInputStream 类与 DataOutputStream 类的构造方法:

  • DataInputStream(DataInputStream in):使用指定的基础 InputStream 对象创建一个 DataInputStream 对象。
  • DataOutputStream(DataOutputStream out):创建一个新的数据输出流,将数据写入一个指定基础输出流。
    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 GroupDemo {
    	public static void main(String[] args) throws IOException {
    		File file=new File("D:\\word.txt");
    //创建 FileOutputStream 对象,指定要向其中写入数据的文件
    		FileOutputStream fos=new FileOutputStream(file);
    //创建 DataOutputStream 对象,用来向文件中写入数据
    		DataOutputStream dos=new DataOutputStream(fos);
    		dos.writeBoolean(false);//将boolean数据写入文件
    		dos.writeUTF("今天星期四");//将字符串写入文件
    		dos.writeDouble(13.26);	//将double数据写入文件
    		dos.writeInt(9);//将int数据写入文件
    		dos.close();
    		fos.close();
    //创建 FileInputStream 对象,指定要从中读取数据文件		
    		FileInputStream fis=new FileInputStream(file);
    //创建 DataInputStream 对象,用来从文件中读取
    		DataInputStream dis=new DataInputStream(fis);
    		System.out.println(dis.readBoolean());//读取boolean数据
    		System.out.println(dis.readUTF());//读取字符串
    		System.out.println(dis.readDouble());//读取double数据 
    		System.out.println(dis.readInt());//读取int数据
    		dis.close();
    		fis.close();
    	}
    }

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值