文件在程序中是以流的形式来操作的。
java程序—>文件(输出流)
文件—>java程序(输入流)
流:数据在数据源(文件)和程序(内存)之间经历的路径。
输入流:数据从数据源(文件)到程序(内存)的路径。
输出流:数据从程序(内存)到数据源(文件)的路径。
相关方法
new File(String pathname) //根据路径构建一个File对象。
new File(File parent, String child) //根据父目录文件+子路径构建。
new File(String parent, String child) //根据父目录 + 子路径构建
createNewFile 创建新文件
package com.javafile;
import java.io.File;
import java.io.IOException;
public class CreateFile {
public static void main(String[] args) {
File file = new File("E:\\","dd.txt");
try {
file.createNewFile();
System.out.println("File Create Successfully");
} catch (IOException e) {
e.printStackTrace();
}
}
}
//File Create Successfully
package com.javafile;
import java.io.File;
public class GetFileInfo {
public static void main(String[] args) {
File file = new File("E:\\code\\java\\code\\dd.txt");
System.out.println(file.getName());
System.out.println(file.getAbsolutePath());
System.out.println(file.getParent());
System.out.println(file.length());
System.out.println(file.exists());
System.out.println(file.isFile());
System.out.println(file.isDirectory());
}
}
dd.txt
E:\code\java\code\dd.txt
E:\code\java\code
0
true
true
false
mkdir创建一级目录
mkdirs创建多级目录
delete删除空目录或文件
package com.javafile;
import java.io.File;
public class DirOper {
public static void main(String[] args) {
File file = new File("E:\\code\\java\\code\\dd.txt");
if(file.exists()){
if(file.delete()){
System.out.println("The file delete successfully");
}
}else {
System.out.println("The file is not exist");
}
File file1 = new File("E:\\code\\java\\code\\a\\b\\c");
if(file1.exists()){
System.out.println("The directory exists");
}else {
if(file1.mkdirs()){
System.out.println("The Directory creates successfully");
}else {
System.out.println("The Directory creates failed");
}
}
}
}
The file is not exist
The Directory creates successfully
| 抽象基类 | 字节流 | 字符流 |
|---|---|---|
| 输入流 | InputStream | Reader |
| 输出流 | OutputStream | Writer |
Java的IO流共涉及40多个类,实际上非常规则,都是从上面4个抽象基类派生的。
由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。
InputStream:字节输入流
InputStream抽象类是所有类字节输入流的父类。
OutputStream:字节输出流
FileInputStream示例代码:
单个字节的方式读取文件内容(使用read()),效率较低:
package com.javainputstream;
import java.io.FileInputStream;
import java.io.IOException;
public class File_Input_Stream {
public static void main(String[] args) {
String filepath = "E:\\code\\java\\code\\dd.txt";
int readdata = 0;
FileInputStream fileInputStream = null;
try {
//创建FileInputStream对象,用于读取filepath的文件
fileInputStream = new FileInputStream(filepath);
while((readdata = fileInputStream.read()) != -1){
System.out.print((char)readdata);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
hello,this is me.
因为单个字节读取效率低下,用read(byte[] b)的方式改进:
package com.javainputstream;
import java.io.FileInputStream;
import java.io.IOException;
public class File_Input_Stream {
public static void main(String[] args) {
String filepath = "E:\\code\\java\\code\\dd.txt";
int readlenth = 0;
FileInputStream fileInputStream = null;
byte[] buffer = new byte[8]; //一次读取8个字节
try {
//创建FileInputStream对象,用于读取filepath的文件
fileInputStream = new FileInputStream(filepath);
//read(byte[] b) 如果读取正常,返回实际读取的字节数
while((readlenth = fileInputStream.read(buffer)) != -1){
System.out.print(new String(buffer, 0, readlenth));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
hello,this is me.
FileOnputStream示例代码:
1.按字节写入 fileOutputStream.write(‘a’);
2.如果想写入字符串,用getBytes()方法,它可以将一个字符串转成一个字节数组。
3.write方法也接收offset,write(data.getBytes(), 0, data.length());。
4.如果不要覆盖,想追加写入,那么new FileOutputStream(filepath, true),加上第二个参数true,来创建FileOutputStream对象,它就是追加的。
package com.javainputstream;
import java.io.FileOutputStream;
import java.io.IOException;
public class File_Output_Stram {
public static void main(String[] args) {
String filepath = "E:\\code\\java\\code\\dd.txt";
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(filepath);
//按字节写入
//fileOutputStream.write('a');
//写入字符串,用getBytes()方法,它可以将一个字符串转成一个字节数组。
String data= "Hello,do you miss me?";
fileOutputStream.write(data.getBytes());
//fileOutputStream.write(data.getBytes(), 0, data.length());
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileReader和FileWriter介绍
FileReader和FileWriter是字符流,即按照字符来操作io。
FileReader相关方法:
FileWriter相关方法:
FileReader示例代码:
package com.javainputstream;
import java.io.FileReader;
import java.io.IOException;
public class File_reader {
public static void main(String[] args) {
String filepath = "E:\\code\\java\\code\\dd.txt";
FileReader fileReader = null;
int readdata = 0;
try {
fileReader = new FileReader(filepath);
while ((readdata = fileReader.read()) != -1){
System.out.print((char) readdata);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Hello,do you miss me?
FileWriter示例:
package com.javainputstream;
import java.io.FileWriter;
import java.io.IOException;
public class File_Writer {
public static void main(String[] args) {
String filepath = "E:\\code\\java\\code\\dd.txt";
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(filepath, true);
String data = "yes, i miss you every much!";
fileWriter.write(data);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}