目录:
1.File类的用法
2.InputStream OutputStream
一.File类的用法
文件系统提供了一个File类来表示一个文件。
1.文件相关操作
构造文件(基于一个路径来构造)
File(File parent,String child);
File(String pathname);
File(String parent,String child);
(以上parent,child,pathname 既可以是绝对路径,也可以是相对路径)
文件的相关方法
file.getParent();//返回父目录文件路径
file.getName();//返回纯文件名称
file.getPath();//返回文件路径
file.getAbsoluteFile();//返回绝对路径
file.getCanonicalPath();//返回修饰过的绝对路径
file.exists();//文件是否真实存在
file.isDirectory();//是否是目录
file.isFile();//是否是文件
file.delete();//删除文件
file.deleteOnExit();//标注文件将被删除,删除动作在JVM运行结束时执行
file.createNewFile();//自动创建空文件,创建成功后返回true
String[] list[];//返回File对象目录下所有的文件名
File[] listFiles();//返回目录下所有文件名,以File对象表示
mkdir();//创建目录
mkdirs();//创建目录,如果必要会创建中间目录
renameTo(File dset());//文件改名
canRead();//是否可读
canWrite();//是否可写
二.InputStream OutputStream
文件内容操作:(1)打开文件;(2)关闭文件;(3)读文件;(4)写文件
在读写文件之前务必要打开文件,读写文件完毕之后务必要关闭文件。
读写文件的类:(1)字节流InputStream OutputStream (2)字符流Reader Writer
什么叫流?
如果将流比作水龙头,想接100ml的水,你可以接100ml,一次接完;也可以接50ml,两次接完...
那么在流的概念里就是读/写100个字节的数据,可以读/写100个字节,一次执行;也可以读/写50字节,两次执行...
那么字节流就是以字节为单位的流,用来操作二进制文件;字符流就是以字符为单位的流,用来操作文本文件。
InputStream相关操作:InputStream不能直接实例化,需要使用子类FileInputStream用来读写文件,构造方法传入一个路径来打开文件,read方法来读文件,close方法关闭文件。
读文件:
public class demo6 {
//使用InputStream
public static void main(String[] args) throws IOException {
//打开文件
InputStream inputStream = new FileInputStream("./txt2.txt");
//2.读取文件
/* while(true){
//无参数版本 返回一个int 其实是byte 读完返回-1
int b = inputStream.read();
if(b == -1){
//文件读完了
break;
}*/
byte[] b = new byte[1024];
//把读取的内容放入一个数组中
int len = inputStream.read(b);
for(int i=0;i<len;i++) {
System.out.println(b[i]);
}
b = new byte[1024];
//把读取内容从off位置开始放入数组中 共放len个元素
int len2 = inputStream.read(b,1,3);
for(int i =0;i<len2;i++){
System.out.println(b[i+1]);
}
//3.关闭文件
inputStream.close();
}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;
public class demo8 {
//文本文件的简单写法
public static void main(String[] args) throws IOException {
InputStream inputStream = new FileInputStream("./txt2.txt");
Scanner scanner = new Scanner(inputStream);
String s = scanner.next();
System.out.println(s);
inputStream.close();
}
}
PCB有一个属性是文件描述符,这个表是一个数组,每个元素都对应这当前进程打开的文件,这个数组的下标就称为“文件描述符”。每次打开文件都会在文件描述符里占用一个位置,每次关闭文件都会释放一个文件。但是文件描述符是存在上线的,如果一个进程一直在打开文件没有释放,就会导致进程在后续打开的时候打开文件失败。
写文件:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class demo10 {
public static void main(String[] args) {
//每次都会清空再进行写操作
try(OutputStream outputStream = new FileOutputStream("./txt2.txt")){
//outputStream.write('h');
//outputStream.write('e');
//outputStream.write('l');
//outputStream.write('l');
//outputStream.write('0');
String s = "hello java";
outputStream.write(s.getBytes());
}catch (IOException e){
e.printStackTrace();
}
}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
public class demo12 {
public static void main(String[] args) {
try(OutputStream outputStream = new FileOutputStream("./txt2.txt")){
PrintWriter printWriter = new PrintWriter(outputStream);
printWriter.println("hello");
}catch (IOException e){
e.printStackTrace();
}
}
}