提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
这些内容是常识:
1.目录结构:n×树
2.绝对路径:D:\profram\qq.exe
盘符 每个\分割的部分就是目录
3.相对路径(需要明确基准路径,工作路径)
设置基准路径是D:
./program/qq/Bin/qq.exe
基准路径不同,相对路径就不同
../返回上一级
.当前目录
/路径分割符
提示:以下是本篇文章正文内容,下面案例可供参考
一、文件是什么
狭义的文件
存储在硬盘上的数据,就是以文件为单位,进行组织
常见的就是普通文件(文本文件,图片,office系列,视频,音频,可执行程序)
文件夹也叫做目录也是一种特殊的文件
广义的文件
操作系统是要负责管理软件硬件资源,操作系统(linux)往往会把这些资源统一抽象成文件来进行管理
一切接文件
比如,有一个网卡,就把这个网卡抽象成一个文件,创建了特殊的文件,表示网卡,从网卡接受数据,就是读文件,发送数据,就是写文件
比如,有一个键盘,从键盘里读数据,就是把键盘抽象成文件,读这个文件就能读到用户输入的按键内容了
二、文件操作
就是操作系统层面提供的一些api
java.io.file(文件\目录)
使用库中的代码操作文件
/
File f=new File("D:/test.txt"); 绝对路径
File f=new File(("./test.txt"));相对路径
//注意此时演示的相对路径写法绝对路径大相径庭
File f=new File(("./test.txt"));
System.out.println(f.getParent());
System.out.println(f.getName());
System.out.println(f.getPath());//构造file对象时的路径
System.out.println(f.getAbsolutePath());(区别就是多了个.表述当前目录)
System.out.println(f.getCanonicalPath());
当前演示绝对路径:
File f=new File("./test.txt");
//判定文件是否存在
System.out.println(f.exists());
//判定文件是否是目录
System.out.println(f.isDirectory());
//判定文件是否是文件
System.out.println(f.isFile());
//把这个文件创建出来
f.createNewFile();
//判定文件是否存在
System.out.println(f.exists());
//判定文件是否是目录
System.out.println(f.isDirectory());
//判定文件是否是文件
System.out.println(f.isFile());
File f=new File("./test.txt");
f.delete();
File f=new File("./testDir");
String[]results=f.list();
System.out.println(Arrays.toString(results));
File f=new File("./testDir");
//创建单层目录
f.mkdir();
创建多层目录
File f=new File("./testDir/aaa/bbb");
f.mkdirs();
//重命名
File srcFile=new File("aaa.txt");
File destFile=new File("BBB.txt");
srcFile.renameTo(destFile);
三.文件内容的读写:数据流
java标准库中,在流的概念上,提供一组类,完成文件读写相关的操作
按照不同特点细分:
字节流
inputStream
读数据:把数据从硬盘读到内存中
第三个方法是把内容放到参数字节数组b中,参数b用来存放方法读到的结果(输出型参数)
InputStream inputStream=new FileInputStream("./bbb.txt");
while(true){
int b=inputStream.read();
if(b==-1){
break;
}
System.out.println(b);
}
inputStream.close();
}
InputStream inputStream=new FileInputStream(“./bbb.txt”);
这个过程相当于打开文件,类似于foen,要想读写文件,就得先打开
记得关闭文件
读取结果:
每个英文字符,正好是一个字节,对应ascii表示
OutputStream
OutputStream outputStream=new FileOutputStream("./bbb.txt");
outputStream.write(97);
outputStream.write(98);
outputStream.write(99);
outputStream.close();
使用OutputStream写文件的时候,只要打开文件成功,就会把文件原有的内容清空
字符流
读文件
Reader reader=new FileReader("./bbb.txt");
read.方法和字节流inputStream差不多
Reader reader=new FileReader("./bbb.txt");
while(true){
int ret=reader.read();
if(ret==-1){
break;
}
char ch=(char)ret;
System.out.println(ch);
}
reader.close();
差别很明显,读取的是字符,字节流读取的是askii
写文件
类似output
Writer writer=new FileWriter("./bbb.txt");
writer.write("hello word");
writer.close();
可穿字符串和字符数组
其他方法(简化操作)
读文件
Scanner
针对文本文件,使用字符流,还可以Scanner读取
Scanner构造方法里面传入要读取流对象,相当于给input之上套壳,后续从Scanner中读取
InputStream inputStream=new FileInputStream("./bbb.txt");
Scanner scanner=new Scanner(inputStream);
while(scanner.hasNext()){
System.out.println(scanner.next());
}
inputStream.close();
写文件
PrintWriter
针对写文本文件,也可以使用PrintWriter来简化开发
同上:
try(OutputStream outputStream=new FileOutputStream("./bbb.txt")){
PrintWriter writer=new PrintWriter(outputStream);
writer.println();
writer.printf("a = %d\n",10);