目录
Java通过File类创建文件 但是在内存中创建,而不是磁盘中创建。
通过对File类对象操作,操作文件。
File file=new File("E:\\ade\\file.txt");//这里并不是真正创建文件 而是在JVM里创建一个文件
File file1=new File("E:\\ade\\file1.txt");
file.createNewFile();//这里是在磁盘创建文件
file1.createNewFile();
file.delete();//删除磁盘中的文件
file1.delete();
- String getParent() 返回 File 对象的父目录文件路径
- String getName() 返回 FIle 对象的纯文件名称
- String getPath() 返回 File 对象的文件路径
- String getAbsolutePath() 返回 File 对象的绝对路径
- String getCanonicalPath() 返回 File 对象的修饰过的绝对路径
- boolean exists() 判断 File 对象描述的文件是否真实存在
- boolean isDirectory() 判断 File 对象代表的文件是否是一个目录
- boolean isFile() 判断 File 对象代表的文件是否是一个普通文件
- boolean createNewFile() 根据 File 对象,自动创建一个空文件。成功创建后返回 true boolean delete() 根据 File 对象,删除该文件。成功删除后返回
- true void deleteOnExit() 根据 File 对象,标注文件将被删除,删除动作会到 JVM 运行结束时才会进行
- String[] list() 返回 File 对象代表的目录下的所有文件名
- File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象 表示
- boolean mkdir() 创建 File 对象代表的目录
- boolean mkdirs() 创建 File 对象代表的目录,如果必要,会创建中间目录
- boolean renameTo(File dest) 进行文件改名,也可以视为我们平时的剪切、粘贴操 作 boolean canRead() 判断用户是否对文件有可读权限
- boolean canWrite() 判断用户是否对文件有可写权限
文件读取
字节流读取
它主要用于字节流的操作,比如从文件中读取数据、网络数据接收等
InputStream inputStream=null;
try
{
inputStream=new FileInputStream("E:\\ade\\file.txt");
//通过字节流只能读取到二进制 要通过string构造
//读取过程中如果出现错误,可能运行不到close 需要finally来关闭文件
byte[] b=new byte[1024];
int len=0;
while(true){
//讲字节读到b中和len
len=inputStream.read(b);
if(len==-1){//当返回值为-1时 文件读取结束
break;
}
System.out.println(b); //字节流 b内都是二进制
//通过string 把二进制转成utf8
String s=new String(b,0,len,"utf8");
System.out.println(s);
}
}catch (IOException e)
{
e.printStackTrace();
}finally {
inputStream.close();
}
字符流读取
它主要用于字符流的操作,比如文本文件的读取。
Reader reader=null;
//读取过程中可能发生异常 就执行不到close 所以要加try 来处理 finally无论如何都要关闭这个文件
//凡事读取文件 都要加try
try
{
reader=new FileReader("E:\\ade\\file.txt");
char[] s=new char[1024];
int len= reader.read(s);
int i=0;
for (int j = 0; j < len; j++) {
System.out.println(s[j]);
}
}catch (IOException e){
e.printStackTrace();
}finally {
reader.close();
}
try{//当try中有资源创建时 在结束时会自动调用close 但类中有实现close方法
Reader reader=new FileReader("E:\\ade\\file.txt");
char[] s=new char[1024];
int size=reader.read(s);
for (int i = 0; i < size; i++) {
System.out.print(s[i]);
//println会自动加个换行
//print不好
}
}catch (IOException e){
e.printStackTrace();
}
如果你需要处理文本文件,那么使用
Reader
会更加合适,因为它可以直接读取字符数据。而如果你需要处理二进制数据,比如图片、音频文件等,那么使用InputStream
会更加合适。
try中有资源创建时,会在结束时自动调用closse 如析构函数一样 但类中需要有实现close的方法
IO读取
//这个更快捷 但只能读取一行
InputStream inputStream=new FileInputStream("E:\\ade\\file.txt");
Scanner scanner=new Scanner(inputStream);
String s=scanner.next();
System.out.println(s);
文件写入
字符流写入
它主要用于字节流的操作,比如文件输出、网络数据传输等。
OutputStream outputStream=null;
try{
outputStream=new FileOutputStream("E:\\ade\\file1.txt");
String s="Hello world";
outputStream.write(s.getBytes());
}catch (IOException e)
{
e.printStackTrace();
}finally {
outputStream.close();
}
字节流写入
它主要用于字符流的操作,比如文本文件的写入
Writer writer=null;
try {
writer=new FileWriter("E:\\ade\\file1.txt");
writer.write("hello");
}catch (IOException e){
e.printStackTrace();
}finally {
writer.close();
}
PrintWriter 是 Writer 的一个扩展,它提供了格式化输出的功能,使得输出更加方便和灵活
PrintWriter printWriter=null;
try {
printWriter=new PrintWriter("\\E:\\ade\\file1.txt");
printWriter.println("hello world");//会把数据写入到缓冲区内
printWriter.flush();//刷新缓冲区
}catch (IOException e){
e.printStackTrace();
}finally {
printWriter.close();
}
示例一:遍历文件 查找要删除的文件
public class file1 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("输入根目录");
String path=scanner.next();
System.out.println("输入文件名");
String filename=scanner.next();
File file=new File(path);
ScamFile(file,filename);
}
public static void ScamFile(File f,String s)
{
File[] files=f.listFiles();//获取目录列表
if(files==null)
{
System.out.println("该目录为空");
return;
}
for(File file:files)
{
if(file.isDirectory()){
ScamFile(file,s);//如果是目录递归 找新目录的列表
}
else {
FileDelete(file,s);//如果是普通文件就查询是否是要删除的文件
}
}
}
public static void FileDelete(File f,String s)
{
Scanner scanner=new Scanner(System.in);
if(f.getName().contains(s))
{
System.out.println("是否删除y/n");
String yn=scanner.next();
if(yn.equals("y")){
f.delete();
System.out.println("删除成功");
}
}
}
}
示例二:复制一个文件
public class file2 {
public static void main(String[] args) throws IOException {
Scanner scanner =new Scanner(System.in);
System.out.println("输入要复制的文件");
String FilePath=scanner.next();
//获取文件路径 并且在JVM中创建文件
File file=new File(FilePath);
//读取文件数据
Reader reader=null;
String data=new String("");
try
{
reader=new FileReader(file);
char[] c=new char[1024];
int len=reader.read(c);
for (int i = 0; i < len; i++) {
data+=c[i];
System.out.println(c[i]);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
reader.close();
}
//获取复制文件的路径和文件名
System.out.println("请输入创建文件的目录\n请输入创建的文件名");
String NewPath=scanner.next();
String NewFile=scanner.next();
String NewFileName=NewPath+'\\'+NewFile;//对文件格式进行清洗
System.out.println(NewFileName);
File file1=new File(NewFileName);
file1.createNewFile();//在磁盘中创建文件
//写入文件
Writer writer=null;
try {
writer=new FileWriter(file1);
writer.write(data);
}catch (IOException e){
e.printStackTrace();
}finally {
writer.close();
}
System.out.println("复制成功!");
}
}