File类与IO流
声明:由于学习所用环境为JDK1.8,所有java代码均在JDK1.8环境下测试通过,如果环境发生变化,可能会有错误发生!
一.File类
java.io.File类代表系统文件(文件和目录)
1.访问文件属性步骤
(1)创建文件对象
File file=new File(String pathname);
(2)调用方法
操作文件的目录或属性(权限,路径,日期和时间)
2.File类的属性
separator默认分隔符
Windows环境下此字段值为“\\”,Unix环境下为“/”
为了程序的跨平台性,应该使用此属性值来代替
3.File类的常用方法
package file;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) {
File f=new File("e:"+File.separator+"test2.txt");
if(f.exists()){
f.delete();
System.out.println("文件已删除");
}else{
try {
f.createNewFile();
System.out.println("文件创建成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package file;
import java.io.File;
public class ListFileDemo {
public static void main(String[] args) {
File f=new File("d:"+File.separator);
File[] file=f.listFiles();
System.out.println(f.length());
for (int i = 0; i < file.length; i++) {
System.out.println(file[i]);
}
}
}
package file;
import java.io.File;
public class DirDemo {
public static void main(String[] args) {
File f=new File("e:"+File.separator+"a"+File.separator+"b"+File.separator+"c");
boolean flag=f.mkdirs();
System.out.println(flag?"目录创建成功":"目录创建失败");
System.out.println(f.getAbsolutePath());
System.out.println(f.getPath());
System.out.println(f.getParent());
}
}
课堂练习:递归遍历文件夹
package file;
import java.io.File;
public class ShowAllFile {
public static void main(String[] args) {
File f=new File("d:"+File.separator);
showAll(f);
}
public static void showAll(File f){
if(f!=null){
if(f.isDirectory()){ //判断是否为目录
File[] file=f.listFiles(); //返回当前正在遍历的目录
if(file!=null){
for(File files:file){
showAll(files);
}
}
}else{
System.out.println(f.getPath());
}
}
}
}
二.IO流的基本原理
数据流(Stream)是指数据通信的通道
java程序中对数据的输入输出是以“流”的方式进行的。JDK中提供了各种各样的流类来获取不同种类的数据。
三.IO流的分类
1.按流向分:
输入流:程序从数据源读取数据的流
输出流:程序向数据源写入数据的流
2.按数据传输单位分:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
3.按功能分:
节点流:用于直接操作目标设备的流
处理流:是对一个已存在的流的连接和封装,通过对数据的处理为程序提供更为强大,灵活的读写功能。
4.JDK提供的所有流类位于java.io包中,都分别继承于下列抽象类
5.IO流四个抽象类的重要方法
InputStream: read(xx)读取字节系列方法
OutputStream: write(xx) 写入字节系列方法
Reader: read(xx)读取字符系列方法
Writer:write(xx)写入字符系列方法
四.文件字节流与文件字符流
文件字节流:FileInputStream和FileOutputStream
文件字符流:FileReader和FileWriter
1.FileInputStream类
构造方法:FileInputStream(File file)
FileInputStream(String name)
package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FileInputStreamDemo {
public static void main(String[] args) {
File f=new File("e:"+File.separator+"test.txt");
InputStream input=null;
try {
input=new FileInputStream(f);
byte[] b=new byte[1024]; //自定义缓冲区
int len=0;
while((len=input.read(b))!=-1){ //读数据到byte[]数组中,并将读入到byte[]数组中的字节数返回
System.out.println(new String(b,0,len));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2.FileOutputStream
构造方法:FileOutputStream(File file)
FileOutputStream(String name)
FileOutputStream(String name,boolean append)
(1)前两种构造方法在向文件写入数据时会覆盖文件原有内容
(2)创建FileOutputStream实例时,如果文件不存在,会自动创建一个空的文件
package stream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class FileOutputStreamDemo {
public static void main(String[] args) {
File f=new File("e:"+File.separator+"test1.txt");
OutputStream output=null;
try {
output=new FileOutputStream(f);
output.write("西安理工大学".getBytes());
String data="曲江校区";
byte[] b=data.getBytes();
output.write(b, 0, 8);
System.out.println(f.length());
System.out.println("写入成功!");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.FileReader类
构造方法
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新FileReader
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
package stream;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
public class FileReaderDemo {
public static void main(String[] args) {
File f=new File("e:"+File.separator+"test.txt");
Reader r=null;
try {
r=new FileReader(f);
int data=r.read(); //读取一个字符
char c=(char)data; //转换成字符
System.out.println("The first time:"+c);
char[] b=new char[1024];
int len=0;
while((len=r.read(b))!=-1){
System.out.println(new String(b,0,len));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.FileWriter类
FileWriter(File file)
根据给定的 File 对象构造一个 FileWriter 对象
FileWriter(File file, boolean append)
根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(String fileName)
根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append)
根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
package stream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class FileWriterDemo {
public static void main(String[] args) {
Writer w=null;
try {
w=new FileWriter("e:"+File.separator+"test1.txt");
w.write('A');
w.write("*".toCharArray());
w.write("西安理工大学");
w.flush();
System.out.println("写入成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
w.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
上一篇: Python Numpy 数组的基本操作
下一篇: 自研、高可用:国产通信框架的未来