File 类
- File类的一个对象,代表一个文件 或者一个文件目录(俗称文件夹)
- File类声明在java.io包下
- File类中涉及到关于文件或者文件目录的创建,删除,重命名,修改时间,文件大小等方法,并涉及到写入或读取文件内容的操作,如果需要读取或者写入文件内容,必须使用io流来完成
- 后续File类的对象常常会作为参数传递到流的构造中,指明读取或者写入的终点
常用构造器
File(String filepath)
File(String ParentPath,String childpath)
File(File parentFile,String childpath)
路径的分类
- 相对路径 :相较于某个路径下指明的路径
- 绝对路径:包含盘符在内的文件或者文件目录的路径
路径分隔符
windows:\\
unix:/
File类的常用方法
public String getAbsoulatePath();//获取绝对路径
public String getPath();//获取路径
public String getName();//获取名称
public String getParent();获取上层文件目录路径,若没有,返回null
public long length();获取文件长度
public long lastModified();//获取最后一次修改时间,毫秒
public String []list();获取指定目录下的所有文件或者文件目录的名称数组
public File [] listFiles();//获取指定目录下的所有文件或者文件目录的File数组
File类的重命名功能
public Boolean renameTo(File dest);//把文件重命名为指定的文件路径
File类的判断功能
public boolean isDirectory();//判断是否是文件目录
public boolean isFile();//判断是否是文件
public boolean exists();//判断是否存在
public boolean canRead();//判断是否可读
public boolean canWrite();判断是否可写
public boolean isHidden();判断是否隐藏
File类的创建功能
public boolean mkdir();创建文件目录,如果存在,不创建,如果此文件目录的上层目录不存在,也不创建
public boolean mkdirs();创建文件目录,如果上层文件目录不存在,一并创建
File类的删除功能
public boolean delete();删除文件或者文件夹
注意事项,java的删除不走回收站,要删除文件夹,此文件夹内不能包含文件或者文件夹
java Io 流
Io流原理概述
谷歌的io寓意为 开放中创新 innovation in the Open,还有一种解释就是Input/Output,I/o技术是非常实用的技术,用于读写文件,网络通讯等。处理设备之间的数据传输,java程序中,对于数据的输入/输出操作以“流(stream)”的方式进行。java.io包下提供了各种流类和接口,用以获取不同种类的数据,并通过标准的方法输入或者输出数据,输入输出(站位是不同的是一个相对的概念)
流的分类
- 按操作的数据单位不同分为:字节流和字符流(纯文本)
- 按流的角色不同分为,节点流,处理流
抽象基类 | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutPutStream | Writer |
1.java的Io流共涉及40多个类,实际上非常规则,都是从如下4个抽象基类派生的。
2.由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀
Io流体系
分类 | 字节输入流 | 字节输出流 | 字符流输入流 | 字符输出流 |
---|---|---|---|---|
抽象基类 | InputStream | OutputStream | Reader | Writer |
访问文件(节点流) | FileInputStream | FileOutputStream | FileReader | FileWriter |
访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
访问管道 | PipedInputStream | PipedOutputStream | pipedReader | pipedWriter |
访问字符串 | StringReader | StringWriter | ||
缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReder | BufferedWriter |
转换流 | InputStreamReader | OutputStreamWriter | ||
对象流 | ObjectInputStream | ObjectOutputStream | ||
FileInputStream | FileOutputStream | FileReader | FileWriter | |
打印流 | PrintStream | PrintWriter | ||
推回输入流 | PushbackInputStream | PushbackReader | ||
特殊流 | DataInputStream | DataOutputStream |
抽象基类和访问文件我们叫节点流,后面的叫处理流
我们重点需要关注的是抽象基类 ,访问文件,缓冲流,转换流,对象流
字符流 (只能操作纯文本)
FileReader
//对于流的操作,创建之后,要关闭
//对于关闭操作,try catch处理,避免空指针异常
public void testReader() throws IOException{
//将hello.txt的内容读取到程序,输出到控制台
//1.实例化文件类,指明我们要操作的文件
File file = new File("E:\\tool\\ideaproject\\factory\\hello.txt");
//2.提供具体的流(纯文本文件)
FileReader fileReader = new FileReader(file);
//3.数据的读入
//read()方法,返回读入的一个字符,如果到文件末尾了,返回-1
int data;
while ((data=fileReader.read())!= -1) {
System.out.println((char) data);
data = fileReader.read();
//4.流的关闭操作
try{
if (fileReader!=null)
fileReader.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
//可以使用read()的重载方法
char[]cbuf=new char[5];
fileReader.read(cubf);//同样也是到末尾返回-1,一次性读取5个
//FileWriter,写的时候没有文件会创建,不会notfind异常
* 节点流(或者叫它文件流) 缓冲流(是处理流的一种,是作用在节点流之上的)
* FileInputStream BufferInputStream
* FileOutputStream BufferOutputStream
* FileReader BufferReader
* FileWriter BufferWriter
* */
public class TestReaderAndWriter {
public static void main(String[] args) {
}
@Test
public void testReader() throws IOException{
//将hello.txt的内容读取到程序,输出到控制台
//1.实例化文件类,指明我们要操作的文件
File file=new File("hello.txt");
//2.提供具体的流(纯文本文件)
FileWriter fw = new FileWriter(file);
//3.数据的写出
fw.write("i have a dream");
fw.write("you need have a dream");
//4.流的关闭
}
//读进来写出去的话就是复制的概念
字节流
//FileInputStream
public void testReader() throws IOException{
//1.实例化文件类,指明我们要操作的文件
File file=new File("hello.txt");
//2.提供具体的流(纯文本文件)
FileInputStream fis = new FileInputStream(file);
//3.数据的读写
byte[] bytes = new byte[5];//因为我们是字节流,所以要创建一个字节数组
int len=fis.read(bytes);//记录每次读取的字节个数
while(len!=-1){
String str=new String(bytes,0,len);
System.out.println(str);
}
//4.流的关闭
fis.close();
}
}
//处理非文件
//文件对象
File a=new File("1.jpg")
File b=new File("2.jpg")
//流对象
FileInputStream fis=new FileInputStream("a");
FileOutPutStream fia=new FileOutPutStream("b");
//FileOutputStream的用法是一样的,都是四步,在流的操作这里,基本上所有操作是差不多的。
标准输入输出流
- System.in:标准输入流,默认从键盘输入
- System.out:标准输出流,默认从控制台输出
- 可以使用System类的setIn(InputStream in)/setOut(printStream out)对默认设备进行更改
public class TestSys {
/*
* 可以使用Scanner
* 可以使用System.in*/
@Test
public void test1() throws IOException {
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
while(true){
String data=bufferedReader.readLine();
if("e".equalsIgnoreCase(data)||"exit".equalsIgnoreCase(data)){
System.out.println("程序结束");
break;
}
}
bufferedReader.close();
}
}