#码神心得_14# java语言之IO操作

本文详细介绍了Java中的File类用法,包括文件操作的各种方法。此外,讲解了数据流的基本概念,区分了输入流与输出流,重点讨论了InputStream/OutputStream与Reader/Writer的差异。最后,给出了两个课堂作业,涉及实际的文件读写操作,以巩固理论知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


晚上7点下班,吃个饭,搭车过去那边上课就已经8点40分了。于是只上了一个钟的课,累,但还是要坚持下去!

Java语言之IO操作

一、File类的用法

        File类功能非常强大,可以对文件或目录进行各种操作,常用的几个方法如下:

        1、String getName(): 返回File对象所表示的文件名或者路径名(如果是路径,则返回最后一级子路径名)

        2、String getPath(): 返回File对象对应的路径名

        3、String getAbsolutePath():返回File对象的绝对路径名(File对象如果是送入一个相对路径,通过这个可以获取绝对路径)

        4、String getParent(): 返回File对象对应目录的父目录名

        5、boolean renameTo(File newName):重命名File对象

        6、boolean exists(): 判断File对象所对应的文件或者目录是否存在

        7、boolean createNewFile()创建新的文件

        8、String[] list() 列出File对象的所有子文件名和路径名,返回String数组

        9、File[] listFile() 列出File对象的所有子文件和路径,返回File数组

        10、boolean isFile(): 判断File对象所对应的是否是文件

        11、boolean isDirectory(): 判断File对象所对应的是否是目录

        12、boolean isAbsolute(): 判断File对象所对应的文件或者目录是否是绝对路径。

        13、boolean mkdir()创建目录

二、数据流的基本概念

        数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。

        数据流又包括输入流与输出流。

        输入流:只能从中读取数据:InputStream(字节流) 和 Reader(字符流)

        输出流:只能向其写入数据:OutputStream(字节流) 和 Writer(字符流)

以下为IO流基本框架图:


三、 InputStream/OutputStream与Reader/Writer

        1、Reade/Writer:字符流,1个字符是2个字节,16位,字符流主要读文本效率比较高。

        2、OutputStream/InputStream:字节流,1个字节是8位,字节流主要读二进制文件,图片 ,音频,视频等,就是为了防止出现读取的单位放大,出现无法还原本程序的目的

        3、设定编码: InputStreamReader isr = new InputStreamReader(new FileInputStream("F:\\test.java"),"utf-8");

        4、字符流转化为字节流:

InputStream in = System. in ; //字节流
InputStreamReader isr = new InputStreamReader(in);  //字节转字符
BufferedReader br = new BufferedReader(isr); //缓冲
        5、将txt文件输出到控制台的小程序:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ReadOne {
	public static void main(String[] args) {
		// 读取test.txt文件
		File file = new File("test.txt");
		// 若文件不存在,则创建文件
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		// 创建字符输入流
		FileReader fileReader;
		try {
			fileReader = new FileReader(file);
			// 创建一个长度为100的“竹筒”
			char[] cbuf = new char[100];
			// 实际读取的字符数
			int read = 0;
			// 使用循环来重复“取水”过程
			while ((read = fileReader.read(cbuf)) > -1) {
				String string = new String(cbuf, 0, cbuf.length);
				System.out.println(string);
			}
			fileReader.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

课堂作业

作业一:创建一个poem.txt文件,往里面写入一首诗 
例如:《静夜思》
提示:此作业考察的是对输出流的使用,可以使用FileOutputStream或者FileWriter

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class WriteTest {
	public static void main(String[] args) {
		String jingyeshi = "静夜思\n 李白\n床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。";
		try {
			BufferedWriter out = new BufferedWriter(
					new OutputStreamWriter(
							new FileOutputStream("poem.txt")));
			out.write(jingyeshi);
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
作业二:设计一个程序将当前的源码文件输出到 source.txt
提示:此作业考察的是输入流和输出流的使用,FileInputStream和FileOutStream

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class ReaderTest {
	public static void main(String[] args) {
		try {
			//创建当前java文件的字符输入流
			BufferedReader in = new BufferedReader(
					new InputStreamReader(
							new FileInputStream("src/mashen14/ReaderTest.java")));
			//创建输出流
			BufferedWriter out = new BufferedWriter(
					new OutputStreamWriter(
							new FileOutputStream("source.txt")));
			//用于实际读取的字符
			String read ;
			//每读一行,就输出一行
			while((read=in.readLine()) != null){
				out.write(read+"\n");
			}
			in.close();
			out.close();			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值