File类的常用方法:
1、创建
    boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false.和输出流不一样,输出流对象一建立创建文件,而且文件已经存在会覆盖。
    boolean mkdir():创建一级目录
    boolean mkdirs():创建多级目录   
2、删除
    boolean delete():删除失败,返回false
void deleteOnExit():在程序退出时删除指定文件  
3、判断
boolean canExecute():文件是否可执行 
boolean exists():文件是否存在
    boolean isDirectory():是否是目录 
    boolean isFile():是否是文件   
    boolean isHidden():文件是否隐藏
    boolean isAbsolute():是否为绝对路径   
4、获取信息
    String getName():获取名称 
    String getParent():获取父目录  
    String getPath():获取路径
    String getAbsolutePath():获取绝对路径 
  long lastModified():最后一次修改的时间 
    long length():文件的大小 
5、修改
    boolean renameTo(File dest):修改文件名  
//例子1:
import java.io.*;
class FileDemo
{
public static<T> void sop(T t)
{
System.out.println(t);
}
public static void main(String[] args)throws IOException
{
//Consmethod();
//method_1();
//method_2();
//method_3();
method_4();
} public static void method_1()throws IOException
{
//创建文件
File f = new File("F:\\myfile\\file.txt");
//f.deleteOnExit();
//sop("create:"+f.createNewFile());
sop("delete:"+f.delete()); //创建文件夹
File dir = new File("F:\\File\\dir");
sop("create:"+dir.mkdir());
// File dir = new File("F:\\File\\dir\\aaa\\bb\\cc");
// sop("create:"+dir.mkdirs());
}
public static void method_2()throws IOException
{
File f = new File("E:\\java0217\\Java IO\\File\\FileDemo.java");
sop("canExecute():"+f.canExecute());
sop("exists()):"+f.exists());
//在判断文件目录是否是目录或文件时,必须先判断该文件对象封装的内容是否存在,通过上面的exists()判断。
sop("isdir:"+f.isDirectory());
sop("isfile:"+f.isFile());
sop("isHidden:"+f.isHidden());
sop("isAbsolute:"+f.isAbsolute());
}
public static void method_3()throws IOException
{
File f = new File("F:\\myfile\\file.txt");
sop("getName:"+f.getName());
sop("getParent:"+f.getParent());
sop("getPath:"+f.getPath());
sop("getAbsolutePath:"+f.getAbsolutePath());
sop("lastModified:"+f.lastModified());
sop("length:"+f.length());
}
public static void method_4()throws IOException
{
File f1 = new File("F:\\myfile\\file.txt");
File f2 = new File("F:\\myfile\\fileDemo.txt");
sop("renameTo:"+f1.renameTo(f2));
} //创建文件对象
public static void Consmethod()
{
//将file.txt封装成File对象,可以将已有的和未出现的文件或者文件夹封装成对象。 //构造方法一File(String pathname)
File f1 = new File("F:\\myfile2\\file1.txt"); //构造方法二File(String parent, String child)
File f2 = new File("F:\\myfile2","file2.txt"); //构造方法三File(File parent, String child)
File d = new File("F:\\myfile2");
File f3 = new File(d,"file3.txt"); //static String separator
String s = File.separator;//默认当前系统下的分隔符。具有跨平台性
File f4 = new File("F:"+s+"myfile2"+s+"file4.txt"); sop("f1:"+f1);//f1:F:\myfile2\file1.txt
sop("f2:"+f2);//f2:F:\myfile2\file2.txt
sop("f3:"+f3);//f3:F:\myfile2\file3.txt
sop("f4:"+f4);//f4:F:\myfile2\file4.txt
}
}
 
获取文件目录数组:
 String[] list() 
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 
 String[] list(FilenameFilter filter) 
          返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。 
 File[] listFiles() 
          返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 
 File[] listFiles(FileFilter filter) 
          返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 
 File[] listFiles(FilenameFilter filter) 
          返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。 
 static File[] listRoots()  
          列出可用的文件系统根。
//例子2:
import java.io.*;
class FileDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
//listRoots();
//list();
listFiles();
}
public static void listRoots()
{
File[] files = File.listRoots();
for(File file: files)
{
sop(file);
}
} public static void list()
{
File f = new File("F:\\");
String[] str = f.list();//调用list方法的file对象必须是一个封装的目录,而且还必须存在,否则返回空指针异常
for(String s: str)
{
sop(s);
}
} }

递归文件目录:

列出指定目录下的文件或文件夹,包含子目录中的内容,也就是列出指定目录下的所有内容。

因为目录中还有目录,只要使用使用同一个列出目录的功能函数即可。
在此过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身。
这种变现形式或者编程手法,称为递归。
递归要注意的:
1.必须有条件限制
2.要注意递归的次数,尽量避免内存溢出
//例子2:
import java.io.*;
class FileDemo3
{
public static void main(String[] args)
{
showdir(new File("E:\\java0217"));
// ToBin(6);
// getsum(10);
// int x = getsum(10);
// System.out.println(x);
}
public static void showdir(File dir)
{
System.out.println(dir);
File[] files = dir.listFiles();
for(int i=0; i<files.length; i++)
{
if(files[i].isDirectory()==true)
showdir(files[i]);//递归调用showdir()
else
System.out.println(files[i]);
}
} public static void ToBin(int num)
{
if(num>0)
{
ToBin(num/2);//递归调用ToBin()
System.out.println(num%2);
}
}
public static int getsum(int x)
{
if(x==1)
return 1;
else
return x+getsum(x-1);//递归调用getsum()
}
}
针对文件的应用举例如下:
练习一:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,建立一个文件列表文件.
思路:
1.将指定的目录进行递归
2.获取递归过程中所有java文件路径
3.将这些路径存储到集合中
4.将集合中的数据写入到文件中
import java.io.*;
import java.util.*;
class JavaFileList
{
public static void main(String[] args)throws IOException
{
File dir = new File("E:\\java0217");
ArrayList<File> al = new ArrayList<File>();
filetolist(dir,al);
System.out.println(al.size());
}
public static void filetolist(File dir,List<File> list)throws IOException
{
//System.out.println(dir);
File[] files = dir.listFiles();
for(int i=0; i<files.length; i++)
{
if(files[i].isDirectory())
filetolist(files[i],list);
else
{
files[i].getName().endsWith(".java");
list.add(files[i]);
}
}
BufferedWriter buf = new BufferedWriter(new FileWriter("F:\\myfile\\listjava.txt"));
for(File f: list)
{
String str = f.getAbsolutePath();
buf.write(str);
buf.newLine();
buf.flush();
}
buf.close();
}
}
练习二:删除一个带内容的目录
删除原理:在window中,删除目录是从外往里删除的,既然是从外往里删除的,就要用到递归。
import java.io.*;
class RemoveDir
{
public static void main(String[] args)
{
Removedir(new File("F:\\aaa"));
}
public static void Removedir(File dir)
{
File[] files = dir.listFiles();
for(int i=0; i<files.length; i++)
{
if(files[i].isDirectory()==true)
Removedir(files[i]);//递归调用Removedir()
else
System.out.println(files[i].toString()+"-file-"+files[i].delete());
}
System.out.println(dir+"::dir::"+dir.delete());
}
}
/*
F:\aaa\bbb\bb::dir::true
F:\aaa\bbb\ccc\a.txt.txt-file-true
F:\aaa\bbb\ccc::dir::true
F:\aaa\bbb::dir::true
F:\aaa::dir::true
*/

练习三:先切割文件(流),在合并文件(流)

import java.io.*;
import java.util.*;
class SplitFileDemo
{
public static void main(String[] args)throws IOException
{
SplitFile();
SequenceFile();
}
public static void SplitFile()throws IOException
{
FileInputStream fis = new FileInputStream("F:\\myfile\\b03.mp3"); byte[] buf = new byte[1024*1024]; int len = 0;
int count=1;
FileOutputStream fos = null;
while((len=fis.read(buf))!=-1)
{
fos = new FileOutputStream("F:\\myfile\\splitfiles\\part"+(count++)+".suipian");//以1M为单位进行切割 fos.write(buf,0,len); fos.close();
}
fis.close(); }
public static void SequenceFile()throws IOException
{
Vector<FileInputStream> v = new Vector<FileInputStream>();
for(int i=1;i<=3;i++)
{
v.add(new FileInputStream("F:\\myfile\\splitfiles\\part"+i+".suipian"));
} Enumeration<FileInputStream> enu = v.elements();
SequenceInputStream sis = new SequenceInputStream(enu);//将多个流整合为一个流对象 FileOutputStream fos = new FileOutputStream("F:\\myfile\\splitfiles\\part123.mp3");
byte[] buf = new byte[1024];
int num = 0;
while((num = sis.read(buf))!=-1)
{
fos.write(buf,0,num);
}
fos.close();
sis.close();
}
}
练习四:用于记录应用程序运行次数,如果使用次数已到,那么给出注册提示。
很容易想到是:计数器。
可是该计数器定义在程序中,随着程序的运行而在内存中存在,并进行自增。
可是,随着该应用程序的退出,该计数器也在内存中消失。
下次启动程序,计数器重新从0计数,这不是我们想要的。
想要的是,即使程序结束,该计数器仍存在。
下次程序启动会先加载计数器的值并加1后重新存储起来。
所以,要建立一个配置文件,用于记录该软件的使用次数。
 
该配置文件使用键值对的形式,这样便于阅读和操作数据。
键值对数据是Map集合,数据是以文件形式存储,使用IO技术,那么Map+io----------->Properties
配置文件可以实现应用程序的共享。
import java.io.*;
import java.util.*;
class RunCount
{
public static void main(String[] args)throws IOException
{
Properties prop = new Properties();
File f = new File("F:\\myfile\\count.ini");//"count.properties"
if(!f.exists())
f.createNewFile(); FileInputStream fis = new FileInputStream(f); prop.load(fis); int count=0;
String value = prop.getProperty("time");
if(value!=null)
{
count = Integer.parseInt(value);
if(count>=5)
{
System.out.println("你好,使用次数已到,再用需要收费!");
return ;
}
}
count++;
prop.setProperty("time",count+""); FileOutputStream fos = new FileOutputStream(f); prop.store(fos,""); fis.close();
fos.close();
}
}

Java:文件类File的详解的更多相关文章

  1. 一个 java 文件的执行过程详解

    平时我们都使用 idea.eclipse 等软件来编写代码,在编写完之后直接点击运行就可以启动程序了,那么这个过程是怎么样的? 总体过程 我们编写的 java 文件在由编译器编译后会生成对应的 cla ...

  2. Java 文件类 File

    1.File 类 1.File 类 1.1.构造方法 文件的 抽象路径名(操作系统无关) 构造方法 格式 说明 File(String filename) 把文件路径名字符串转换为“抽象路径名”,用来 ...

  3. Java枚举类与注解详解——一篇文章读懂枚举类与注解详

    目录 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举类实现接口 二.注解 ① 生成文档相关注解 ②注解在编译时进行格式检查 ③注解跟踪代码的 ...

  4. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

  5. Java虚拟机之垃圾回收详解一

    Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...

  6. 使用Java操作文本文件的方法详解

    使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...

  7. java 关键字final static native详解

    java 关键字native static final详解 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义, ...

  8. Java网络编程和NIO详解开篇:Java网络编程基础

    Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为 ...

  9. Java网络编程和NIO详解8:浅析mmap和Direct Buffer

    Java网络编程与NIO详解8:浅析mmap和Direct Buffer 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NI ...

随机推荐

  1. window窗口-button(按钮)-dialog(对话框,带按钮)

    描述:一个可拖动的窗口程序,默认情况下窗口自由移动.调整大小.打开关闭! 案例1(普通的窗口): <div class="easyui-window" icon-Cls=&q ...

  2. xml基础学习笔记04

    今天继续xml学习,主要是:SimpleXML快速解析文档.xml与数组相互转换 .博客中只是简单的做一个学习记录.积累.更加详细的使用方法,可以查看php手册 1.SimpleXML快速解析文档 前 ...

  3. sourceInsight使用技巧,持续更新中~~~

    作为测试人员,读各种平台的工程代码时,根本不想安装各种vs或者eclipse等,于是,就找了一款代码阅读工具. sourceInsight,下载地址为官网:http://www.sourceinsig ...

  4. 农行网银软件导致XP死机

    一台PC电脑安装了XP系统,突然会大约30分钟左右死机,键盘(CTRL+ALT+DEL)和鼠标都没反应,只能强行关机后重新开机.因为是用了几年的电脑,担心热稳定性问题,打开机箱后,发现CPU风扇很多灰 ...

  5. 《Soft Skill》一书中的好句子

    The biggest mistake that you can make is to believe that you are working for somebody else. Job secu ...

  6. 在线自动下载最新版本jquery

    <script src="http://code.jquery.com/jquery-latest.js">

  7. WinForm-利用Anchor和Dock属性缩放控件

    转自:http://www.cnblogs.com/tianzhiliang/articles/2144692.html 有一点让许多刚接触WinForms编程的开发者感到很棘手,就是在用户调整各种控 ...

  8. Poj 1050 分类: Translation Mode 2014-04-04 09:31 103人阅读 评论(0) 收藏

    To the Max Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39058   Accepted: 20629 Desc ...

  9. [工作积累] OpenGL ES3.0: glInvalidateFramebuffer

    https://www.khronos.org/opengles/sdk/docs/man3/html/glInvalidateFramebuffer.xhtml 这个在GLES2.0上只有Exten ...

  10. 常用的Python字符串常量

    下面是一些常用的Python字符串常量string.digits:包含0-9的字符串string.letters:包含所有大小写字母的字符串 string.lowercase:所有小写字母string ...