File IO
文件的操作和目录
1.定义:
File对象既可以表示文件,也可以表示目录,一个File对象可以代表一个文件或目录
创建一个File对象的语法格式如下
File file = new File(String pathName);
//String pathName表示所指向的文件路径名
示例:
/**
* 显示文件信息
* @param args
*/
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 static void main(String[] args) {
FileMethods fm=new FileMethods();
File file=new File("D:\\myDoc\\hello.txt");
fm.showFileInfo(file);
}
File的常用方法
方法名称 | 说明 |
---|---|
boolean exists() | 判断文件或目录是否存在 |
boolean isFile() | 判断是否是文件 |
boolean isDirectory() | 判断是否是目录 |
String getPath() | 返回此对象表示的文件的相对路径名 |
String getAbsolutePath() | 返回此对象表示的文件的绝对路径名 |
String getName() | 返回此对象表示的文件或目录的名称 |
boolean delete() | 删除此对象指定的文件或目录 |
boolean createNewFile() | 创建名称的空文件,不创建文件夹 |
long length() | 返回文件的长度,单位为字节,若文件不存在,则返回OL |
示例:
public class FileMethods2 {
/**
* 创建文件夹的方法
* @param args
*/
public void creat(File file) {
if (!file.exists()) {
try {
file.createNewFile();
System.out.println("文件已创建!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 删除文件夹
* @param args
*/
public void delete(File file) {
if (file.exists()) {
file.delete();
System.out.println("文件夹已删除!");
}
}
/**
* 显示信息
* @param args
*/
public void showFileInfo(File file) {
if (file.exists()) {
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 static void main(String[] args) {
File file=new File("D:\\myDoc\\test.txt");
FileMethods fm=new FileMethods();
fm.showFileInfo(file);
}
文件的流
1.定义:
流是指一连串流动的字符,是以先进先出的方式发送和接收数据的通道。一个流是一个输入设备或输出设备的抽象表示。
2.分类:
按照流的流向进行划分,可以分为输入流和输出流。
输入流:只能从中读取数据,而不能向其中写入数据
OutputStream和Writer作为基类
输入流示例:
public class FileInputStreamTest {
public static void main(String[] args) throws IOException{
//声明流对象
FileInputStream fiS=null;
try {
fiS=new FileInputStream("D:\\myDoc\\hello.txt");
int date;
System.out.println("可读取的字节数:"+fiS.available());
System.out.println("文件内容为:");
//循环读取数据
while ((date=fiS.read())!=-1) {
System.out.println((char)date+" ");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (fiS!=null) {
fiS.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出流:只能向其中写入数据,而不能从中读取数据
InputStream和Reader作为基类
输出流示例:
public class FileOutputStream {
public static void main(String[] args) {
java.io.FileOutputStream fos=null;
try {
String str="好好学习Java";
byte[] words=str.getBytes();
//创建流对象,以追加方式写入文件
fos=new java.io.FileOutputStream("D:\\myDoc\\hello.txt");
//写入文件
fos.write(words,0,words.length);
System.out.println("hello文件已更新!");
} catch (IOException e) {
System.out.println("创建文件时出错!");
}
finally {
try {
if (fos!=null) {
fos.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
按照所操作的数据单元的不同,流又可划分字节流和字符流
字节流:
操作的最小数据单元为8位的字。
字符流:
操作的最小数据单元为16为的字符
示例:
public class FileReader {
public static void main(String[] args) {
//创建fielreader对象
Reader fr=null;
StringBuffer sbf=null;
try {
fr =new java.io.FileReader("D:\\myDoc\\简介.txt");
char ch[] =new char[1024];
sbf=new StringBuffer();
int length=fr.read();
while (length!=-1) {
sbf.append(ch);
length=fr.read();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (fr!=null) {
fr.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
文件的读写
字节流读写文本文件
1.读取文件
字节输入流InputStream的作用就是将文件中的数据输入到内部存储器中(简称内存),它提供了一系列读取数据的有关方法
字节流读取常用方法:
方法名称 | 说明 |
---|---|
int read() | 读取一个 字节数据 |
int read(byte[] b) | 将数据读取到字节数据中 |
int read(byte[] b,int off,int len) | 从输入流中读取最多len长度的字节,保存到字节数组b中,保存的位置从off开始 |
void close() | 关闭输入流 |
int available() | 返回输入流读取的估计字节数 |
字节输入流FileInputStream类
在实际应用中,我们通常使用InputStream的子类FileInputStream类来实现文本文件内容的读取.
常用的构造方法有以下两个:
(1) FileInputStream (File file),file 指定文件数据源
File file = new File("C:\\test.txt");
InputStream fileObject = new FileInputStream(file);
(2)使用 FileInputStream (String name),name指定文件数据源 ,包含路径信息
InputStream fileObject = new FileInputStream("C:\\test.txt");
(3)利用文件输入流的方法读取文本文件的数据
fileObject.avaiable();//可读取的字节数
fileObject.read();//读取文件的数据
(4)关闭文件输入流的对象
fileObject.close();
示例:
public static void main(String[] args) {
//声明流对象
FileInputStream fis =null;
try {
fis = new FileInputStream("E:\\save.txt");
int data;
System.out.println("可读取的字节数:"+fis.available());
System.out.print("文件内容:");
//循环读取数据
while((data=fis.read())!=-1) {
System.out.print((char)data+"");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally {
try {
if(fis!=null) {
fis.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
2.写入文件
(1)字节输出流OutputStream类
字节输出流OutputStream类的作用是把内存的数据输出到文件中
字节流写入常用方法:
方法名称 | 说明 |
---|---|
void write(int c) | 写入一个字节数据 |
void write(byte[] buf) | 写入数据buf的所有字节 |
void write(byte[] b,int off,int len) | 将字节数组中从off位置开始,长度为len的字节数据输出带输出流中 |
void close() | 关闭输出流 |
(2)字节输出流FileOutputStream类
我们通常使用OutputStream的子类FileOutputStream类来实现文本文件内容的写入。语法:
File file = new File("C:\\test.txt");
FileOutputStream fos = new FileOutputStream(file);
(3)利用文件输出流的方法写入数据到文本文件
String str ="好好学习!";
byte[] words =str.getBytes();
//利用write方法将数据写入文件中
fos.write(words,0,words.length);
(4)关闭文件输出流的对象
fileObject.close();
示例:
public static void main(String[] args) {
java.io.FileOutputStream fos=null;
try {
String s ="好好学习Java";
byte[] words =s.getBytes();//字节数组
//创建流对象追加方式写入文件
fos= new java.io.FileOutputStream("E:save.txt",true);
//写入文件
fos.write(words,0,words.length);
System.out.println("save文件已经更新!");
} catch (IOException e) {
System.out.println("创建文件出错!");
}finally {
try {
if(fos!=null) {
fos.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
字符流读写文本文件
1.读取文件
(1)字符输入流Reader类
字符流读取常用方法:
方法名称 | 说明 |
---|---|
int read() | 从输入流中读取单个字符 |
int read(byte[] c) | 从输入流中读取c.length长度的字符,保存在字符数组c中,返回实际读取的字符数 |
read(char[] c,int off,int len) | 从输入流读取最多len长度字符,保存到字符数据c中,保存位置从off位置开始,返回实际读取的字符长度 |
void close() | 关闭流 |
(2)字符输入流FileReader类
FileReader类是Reader类的子类,语法:
Reader fr = new FileReader("C:\\\test.txt");
(3)利用文件输入流的方法读取文本文件的数据
int.read();//读取单个字符
(4)关闭相关流的对象
fr.close();
示例:
public class FileReader {
public static void main(String[] args) {
java.io.Reader fr =null;
StringBuffer sbf=null;
try {
fr = new java.io.FileReader("E:\\简介.txt");
char ch[] = new char[1024];//创建字符数组作为中转站
sbf = new StringBuffer();
int length =fr.read(ch);//将字符读出
//循环读取并追加字符
while((length!=-1)) {
sbf.append(ch);//追加
length=fr.read();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally{
try {
if(fr!=null) {
fr.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
2.写入文件
(1)字符输出流Writer类
Writer类是向文件写入数据的字符流,常用方法
字符流读取常用方法:
方法名称 | 说明 |
---|---|
write(String str) | 将str字符串里包含的字符输出到指定的输出流中 |
write(String str,int off,int len) | 将str字符串里从off位置开始长度为len的字符输出到输出流 |
void close() | 关闭输出流 |
void flush() | 刷新输出流 |
(2)字符输出流FileWriter类
FileWriter类是Writer的子类,语法:
Writer fr = new FileWriter("C:\\test.txt");
(3)创建一个FileWriter的对象
Writer fr = new FileWriter("C:\\test.txt");
(4) 关闭文件输出流的对象
bw.flush();//刷新该流的缓冲
fw.close();//关闭此流
示例:
public class FileWriter {
public static void main(String[] args) {
java.io.Writer fw=null;
try {
//创建一个FileWriter对象
fw = new java.io.FileWriter("E:\\save.txt");
//写入信息
fw.write("我热爱我的团队!");
fw.flush();//刷新缓冲区
System.out.println("写入成功!");
} catch (IOException e) {
System.out.println("文件不存在!");
}finally {
try {
if(fw!=null) {
fw.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
二进制文件的读写
使用字节流类DataInputStream读二进制文件
DataInputStream类是FileInputStream的子类,它是FileInputStream的扩展
具体操作步骤如下
(1)引入相关类
import java.FileInputStream;
import java.DataInputStream;
(2)创建一个数据输入流的对象
FileInputStream fis = new FileInputStream("C:\\HelloWorld.class");
DataInputStream dis = new DataInputStream(fis);
(3)利用数据输入流的方法读取文本文件的数据
dis.read();//读取数据字节
(4)关闭相关流的对象
dis.close();//关闭数据输入流
使用字节流类DataOutputStream写二进制文件
DataOutputStream类是FileOutputStream的子类,它是FileOutputStream类的扩展
具体操作步骤如下
(1)引入相关类
import java.FileOutStream;
import java.DataOutStream;
(2)创建一个数据输入流的对象
FileOutputStream fos = new FileOutputStream("C:\\HelloWorld.class");
DataOutputStream out = new DataOutputStream(fis);
(3)利用数据输入流的方法写文本文件的数据
out.write(1);//将指定字节数据写入
(4)关闭相关流的对象
out.close();//关闭数据输入流
示例:
public class DataOutputStream {
public static void main(String[] args) {
java.io.DataOutputStream out =null;
java.io.DataInputStream dis=null;
try {
//创建输入流对象
java.io.FileInputStream fis = new FileInputStream("E:\\save.txt");
dis = new DataInputStream(fis);
//创建输出流对象
java.io.FileOutputStream outFile = new FileOutputStream("E:\\save1.txt");
out = new java.io.DataOutputStream(outFile);
int temp;
//读取文件
while((temp=dis.read())!=-1) {
out.write(temp);
}
System.out.println("成功!");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(dis!=null) {
dis.close();
}if(out!=null) {
out.close();
}
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
}