目录
1.File类
2.流
2.1.InputStream
2.2.OutputStream
总结
内容仅供学习交流,如有问题请留言或私信!!!!!
有空您就点点赞
1.File类
文件:相关记录或存放在一起的数据的集合
Java程序如何访问文件属性?
Java API:java.io.File类
File类访问文件属性:
File类的常用方法:
方法名称 | 说明 |
boolean exists( ) | 判断文件或目录是否存在 |
boolean isFile( ) | 判断是否是文件 |
boolean isDirectory( ) | 判断是否是目录 |
String getPath( ) | 返回此对象表示的文件的相对路径名 |
String getAbsolutePath( ) | 返回此对象表示的文件的绝对路径名 |
String getName( ) | 返回此对象表示的文件或目录的名称 |
boolean delete( ) | 删除此对象指定的文件或目录 |
boolean createNewFile( ) | 创建名称的空文件,不创建文件夹 |
long length() | 返回文件的长度,单位为字节, 如果文件不存在,则返回 0L |
测试:
import java.io.File;
import java.io.IOException;
//文件操作:文件创建,获取文件相关信息,删除文件
public class FileDemo {
// 创建文件
public void create(File file) {
if (!file.exists()) {
// 如果文件不存在,则创建
try {
file.createNewFile();
System.out.println("文件已创建!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 获取文件信息
public void showFileInfo(File file) {
if (file.exists()) {
if (file.isFile()) {
// 是文件
System.out.println("文件名称:" + file.getName());
System.out.println("文件相对路径:" + file.getPath());
System.out.println("文件绝对路径:" + file.getAbsolutePath());
System.out.println("文件大小为:" + file.length() + "个字节");
}
if (file.isDirectory()) {
// 是目录
System.out.println("此文件是目录!");
}
} else {
System.out.println("此文件不存在!");
}
}
// 删除文件
public void delete(File file) {
if (file.exists()) {
file.delete();
System.out.println("文件已删除!");
}
}
// 测试方法
public static void main(String[] args) {
FileDemo fileDemo = new FileDemo();
File file = new File("E:\\eclipse_workspaces\\testDemo\\test.txt");//绝对路径
//File file = new File("test.txt");//相对路径
// fileDemo.create(file);
// fileDemo.showFileInfo(file);
fileDemo.delete(file);//删除文件
}
}
2.流
如何读写文件?
- 通过流来读写文件
- 流是一组有序的数据序列
- 以先进先出的方式发送信息的通道
Java流的分类:
2.1.InputStream
InputStream与FileInputStream
- InputStream类常用方法(抽象类-基类)
- int read( )
- 从输入流一个字节一个字节的读,返回的是该字节的整数表示形式,如果读到了输入流的末尾。返回 -1。
- int read(byte[ ] b)
- 从输入流读取若干字节,把这些字节保存到数组b中。返回的是读取到的字节数,,如果读到了输入流的末尾,返回-1。
- int read(byte[ ] b , int off , int len)
- 从输入流读取若干字节,把这些字节保存到数组b中。off指的是字节数组中开始保存数据的起始下标。len指的是读取的字节数目。返回的是实际读取到的字节数,如果读到了输入流的末尾,返回-1。
- void close( )
- 关闭输入流
- int available( )
- 可以从输入流中读取的字节数目
- int read( )
- 子类FileInputStream常用的构造方法
- FileInputStream(File file)
- FileInputStream(String name)
使用FileInputStream读文本文件操作步骤:
- 引入相关的类
import java.io.IOException;
import java.io.FileInputStream;
- 狗杂走文件输入流-FileInputStream对象
FileInputStream fis= new FileInputStream("c:\\test.txt");
- 读取文本文件的数据
fis.available();
fis.read();
- 关闭文件流对象
fis.close();
代码演示:
//1.引入资源
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
//通过字节输入流完成对文件的读操作
public class FileInputStreamDemo {
public static void main(String[] args) {
FileInputStream fis = null;
try {
// 2.创建FileInputStream对象
fis = new FileInputStream("E:\\eclipse_workspaces\\testDemo\\test.txt");
System.out.println("可以读取到的字节数:" + fis.available());
// 3.借助FileInputStream对象的read()方法读取文件
// int data; //读取到的每个字节的整数表示形式 比如 和--104
// while ((data = fis.read()) != -1) {
// System.out.print((char) data);
// }
// 借助借助FileInputStream对象的read(byte[])方法读取文件
byte[] b = new byte[1024];
int data;// 读取到的字节数
while ((data = fis.read(b)) != -1) {
//字节读取到了字节数组b中,需要循环输出b的内容
for (int i = 0; i < data; i++) {
System.out.print((char)b[i]);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4.关闭输入流
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.2.OutputStream
OutputStream与FileOutputStream
- OutputStream类常用方法(抽象类-基类)
- white(int):
- 往输入流中写入一个个的字节。
- write(byte[] buf)
- 往输入流中写入一个字节数组。
- write(byte[] b,int off,int len)
- 往输入流中写入一个字节数组,off代表开始从字节数组的off位置开始往外写,len代表往外写len长度的字节。
- void close( )
- 关闭输出流。
- void flush()
- 强制把缓冲区的数据写到输出流中
- white(int):
- 子类FileOutputStream常用的构造方法
- FileOutputStream(File file)
- FileOutputStream(String name)
- FileOutputStream(String name,boolean append)
- 前两种构造方法在向文件写数据时将覆盖文件中原有的内容。
- 创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件
使用FileOutputStream读文本文件操作步骤:
- 引入相关的类
import java.io.IOException;
import java.io.FileOutputStream;
- 狗杂走文件输入流-FileInputStream对象
FileOutputStream fos = new FileOutputStream("text.txt");
- 读取文本文件的数据
String str ="好好学习,天天向上!";
byte[] words = str.getBytes();
fos.write(words, 0, words.length);
- 关闭文件流对象
fos.close();
代码演示:
//1.引入资源
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
//通过字节输出流完成对文件的读操作
public class FileOutputStreamDemo {
public static void main(String[] args) {
FileOutputStream fos = null;
try {
// 2.创建字节输出流对象(FileOutputStream)
//fos = new FileOutputStream("E:\\eclipse_workspaces\\testDemo\\test.txt");
//不覆盖原有的内容。进行追加
fos = new FileOutputStream("E:\\eclipse_workspaces\\testDemo\\test.txt",true);
// 3.调用字节输出流对象(FileOutputStream)的write()方法写入文件
String infoString = "好好学习,天天向上!";
// 将写入的字符串打散为一个字节数组
byte[] infos = infoString.getBytes();
fos.write(infos, 0, infos.length);
System.out.println("test文件已被更新!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
// 4.关闭输出流
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.3.Reader
- 字符输入流Reader类常用方法(基类-抽象类)
- int read()
- int read(char[ ] c)
- int read(char[ ] ,int off ,int len)
- void close()
- File类是Reader类的孙子类
- FileReader (File file)
- FileReader (String name)
- FileReader读取文件
- 引入资源
- 创建FileReader对象
- 调用相应read()读取文件(文件操作)
- 关闭字符流
解决中文乱码问题:
- 手动调整
- 通过流读取时设置编码格式
- InputStreamReader(InputStream in)
- InputStreamReader(InputStream in,String charsetName)
2.4.BufferedReader
如何提高字符流读取文本文件的效率:使用FileReader类与BufferedReader类
BufferedReader类是Reader类的子类,BufferedReader带有缓冲区,内有按行读取内容的readLine()方法。
BufferedReader:
- 带有缓冲区的字符输入流
- 提高了文件的读取效率
-------------------------------------------------------------------------------------------------------------
- BufferedReader类常用的构造方法
- BufferedReader(Reader in)
- 子类BufferedReader特有的方法
- readLine()
使用BufferedReader读文本文件的操作步骤:
- 引入相关的类
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
- 构造 BufferedReader 对象和 FileReader 对象
Reader fr = new FileReader("C:\\myTest.txt ");
BufferedReader br=new BufferedReader(fr);
- 调用 readLine()方法读取数据
br.readLine();
- 关闭文件流对象
br.close();
fr.close();
总结
练习:这里写练习及链接等。