IO分类
File类:
java使用File类表示操作系统上文件系统中的文件或目录,它是在java.io.File包下的,我们可以使用File操作硬盘上的文件或目录进行创建或删除;
1)关于路径的描述:不同的文件系统差异较大,Linux和Windows就不同,最好使用相对路径,不要用绝对路径;
2)目录分隔符:Windows中为“/”,Linux中为“\”;
File类的常用方法:
操作文件的的常用方法:
方法 | 描述 |
public File(String pathname) | 根据传入的完整路径创建File类对象 |
public boolean exists() | 判断文件是否存在 |
public BooleancreateNewFile() | 创建新文件,路径必须存在 |
public long length() | 返回文件的内容长度,单字节码1 |
public long lastMondified() | 文件最后用一次修改的时间 |
public String getName() | 获得文件的名字 |
public String getPath() | 返回文件的路径信息 |
public boolean isFile() | 判断给定的路径是否是一个文件 |
public boolean delete() | 删除文件 |
案例:
public class DemoFile {
public static void main(String[] args) {
//\\在路径中表示\ /在路径中表示\ 建议在window中用\\,其他用/
//非运行异常(必检异常) IOException
String pathName="E:\\code\\Demo4.java";//文件路径
File file=new File(pathName);
//exists 判断文件是否存在
if(!file.exists()){
try {
//createNewFile 创建新的文件,成功返回true,否则返回false
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
//b-kb 1024b=1kb 1024kb=1m 1024m=1g
System.out.println("文件大小:"+file.length());
System.out.println("文件名:"+file.getName());
System.out.println("文件路径:"+file.getPath());
System.out.println("是否是一个文件:"+file.isFile());
//返回文件最后一次被修改的时间
long time = file.lastModified();
Date date=new Date(time);//作业
String time1=FormatDate.formatDateToString(date);
System.out.println("最后修改时间:"+time1);
//System.out.println(file.delete());
//返回String类型的父路径。
System.out.println("文件父路径:"+file.getParent());
//返回Flie类型的父路经
file.getParentFile();
System.out.println("===========对目录进行操作========================");
pathName="E:\\code";
File file1=new File(pathName);
if(!file1.exists()){
System.out.println("目录不存在");
// file1.mkdir();//根据路径创建单级目录
file1.mkdirs();//可以根据路径创建多级目录
}
//判断路径是否是一个目录
System.out.println(file1.isDirectory());
System.out.println("目录名:"+file1.getName());
//列出指定目录的全部文件
File[] files = file1.listFiles();
for (File file2 : files) {
System.out.println(file2.getName());
}
//列出指定目录的全部文件名
String[] list = file1.list();
System.out.println(Arrays.toString(list));
}
}
操作目录的常用方法
方法 | 描述 |
public file(String pathName) | 根据传入的完整路径创建File类对象 |
public boolean exists() | 判断目录是否存在 |
public boolean mkdir() | 根据路径创建单级目录 |
public boolean isDirectory() | 判断给定的路径是否为目录 |
public String getName() | 获得路径的名字 |
public File[] listFiles() | 列出指定目录的全部文件 |
public String[] list() | 列出指定目录的全部文件名称 |
public boolean delete() | 删除目录(空) |
案例:
public class DemoFile1 {
/**
* 获取指定目录“E:\工具包”下的所有文件的文件名,大小,最后修改时间,如果是目录,继续向下查找目录中的文件,要求同上
*/
public static void main(String[] args) {
String pathName="E:\\工具包";
test(pathName);
}
public static void test(String pathName){
File file=new File(pathName);
if(file.isDirectory()){
System.out.println("==================="+file.getName()+"==============================");
File[] files = file.listFiles();
for (File file1 : files) {
if(file1.isDirectory()){
String pathName1=file1.getPath();
test(pathName1);
}else{
long l = file1.lastModified();
Date date =new Date(l);
System.out.println("文件名:"+file1.getName()+",文件大小:"+file1.length()/(1024*1024)+"m,最后修改时间:"+FormatDate.formatDateToString(date));
}
}
}else{
System.out.println("路径不是一个目录");
}
}
}
基本流:FIS和FOS
流:根据方向分为输入流和输出流,方向的定义是基于我们的程序,流向我们程序的流叫做输入流,从程序向外流的叫做输出流
字节流:
计算机中都是二进制数据,一个字节是8个2进制位,字节可以表示所有的数据,比如文本、音频、视频、图片都是作为字节存在的,也就是说字节流处理的数据非常多;
字节流的抽象基类:
输入流:java.io.InputStream
输出流:java.io.OutputStream
特点:
字节流的抽象基类派生出来的子类都是以其父类名作为子类名的后缀。
说明:字节流处理的单元是一个字节,用于操作二进制文件
public class Demo3 {
public static void main(String[] args) {
try {
test1();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void test() throws IOException {
File file=new File("E:\\code\\Demo2.java");
if(file.exists()&&file.isFile()){
FileInputStream fileInputStream=new FileInputStream(file);//字节输入流
while(true){
int read = fileInputStream.read();
if(read==-1){//当返回-1是表示文件读取结束
break;
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print((char)read);
}
}
}
public static void test1() throws IOException {
File file=new File("E:\\code\\Demo2.java");
if(file.exists()&&file.isFile()){
FileInputStream fileInputStream=new FileInputStream(file);//字节输入流
FileOutputStream fileOutputStream=new FileOutputStream("E:\\code\\Demo5.java");//字节输出流
byte [] by=new byte[1024];//缓冲数组
while(true){
int read = fileInputStream.read(by);
if(read==-1){
break;
}
fileOutputStream.write(by,0,read);
}
System.out.println("复制完毕");
fileOutputStream.close();//关闭资源
fileInputStream.close();
}
}
}
字符流:
计算机并不区分二进制文件与文本文件,所有的文件都是以二进制形式来存储,因此,从本质上说,所有的文件都是二进制文件。所以字符流是建立在字节流之上的,它能够提供字符的编码和解码;
字符流就是:字节流+编码表,更便于操作文字数据;
字符流的抽象基类:Reader,Writer;
由这些类派生出来的子类明后才能都是以其父类名作为子类名的后缀,如:FileReader,FileWriter;
Reader字符输入流:
public static void readFile(String str) throws Exception{
FileReader reader=new FileReader(str);
int i=reader.read();//97
char ch=(char)i;
Character ch1=ch;
String s=ch1.toString();
char[] c=new char[1024];
int m;
while((m=reader.read(c))!=-1){
String s1=new String(c);
System.out.println(s1);
}
//reader.read(c, 0, c.length);
if(reader!=null){
reader.close();
}}
Writer字符输出流:
public static void write(String str) throws Exception {
FileWriter writer = new FileWriter("a.txt");
writer.write('a');
writer.write(97);
char[] ch = new char[] { 'c', 'n', 'd' };
writer.write(ch);
writer.write(ch, 0, ch.length);
writer.write("\r\n男神的名字是:cn吹吹牛");
if (writer != null) {
writer.close();
}
}
完!!