Java学习笔记-File操作(API)

一:知识点总结

1.File类只用于表示文件(目录)的信息,不能对文件的内容进行访问。

2.创建File对象时候的路径问题

(1)File file=new File(“绝对路径”);

“绝对路径”:

1)windows:

  1. “d:/test” -------Java提供的自动处理的方法,程序员比较常用
  2. “d:\\test”-----转义字符
  3. “d:”+File.separator+”test”

2)Linnux/Unix/Mac

A.”/home/soft01/test”

B.  ”/home/soft01/”+File.separator+”test”

(2)File file=new File(“相对路径”);

相对路径:Windows和Linux没有差别

如:”demo/test”   -------为了方便,跨平台,经常使用相对路径

相对的起点位置:main方法的启动路径,在Eclipse中是当前项目文件夹

File f=new Flie(“demo”);

f.mkdir()

提示:抽象路径应尽量使用相对路径,并且目录的层级分隔符不要直接写”/”或”\”,应使用File.separator这个常量表示,以避免不同系统带来的差异。

3. 构造方法:
      (1)File file=new File(“name”);

(2)File parent= new File(“demo”);

File file= new File(parent,name);

二:代码练习:

1. 利用File API创建了文件夹,文件

//只是在内存中创建一个对象,硬盘上没有文件夹

File file=new File("e:"+File.separator+"fileTest");

//在硬盘上创建文件夹,返回值为true,创建成功(原先没有)

反之,创建失败(已经有文件夹或文件)

boolean ok=file.mkdir();

System.out.println(ok);

//同理,创建文件----注意此处抛出异常,需要加上throws IOException

File f=new File("e:"+File.separator +"fileTest"+File.separator+"test.txt");

boolean ok=f.createNewFile();

System.out.println(ok);

2.//在当前文件夹中创建一个新的文件夹demo

“当前文件夹”就是当前项目的文件夹!使用刷新(F5)查看结果

“其中“demo”参数是相对路径

//在demo文件夹中创建文件

File f=new File("demo");

f.mkdir();

File file=new File("hello");

file.createNewFile();

//访问f指向的demo文件夹中的文件

File a=new File(f,"test.txt");

a.createNewFile();

//在demo文件夹中创建一个子文件夹

File file1=new File(f,"one");

file1.mkdir();

3. 一次在硬盘上创建系列路径(多级文件夹)

File file = new File("myhome/job/days/day01/am");

file.mkdirs();

4. //file.exists()用于检查硬盘上是否存在文件,文件夹

// file.isFile()如果被检查的是文件返回true

//file.isDirectory()如果检查的是文件夹返回true

boolean found=file.exists();

System.out.println(found);

boolean f=file.isFile();

boolean d=file.isDirectory();

System.out.println(f);

System.out.println(d);

5. 访问已经存在的文件,获取文件相关的信息

File file = new File("D:/Welcome.html");

//文件的长度:文件中字节数据个

long l = file.length();

System.out.println(l);

System.out.println(l/1024D);

//文件的最后last修改Modify时间----

输出的是里面文件夹里(包括子文件的最后修改时间)

long time = file.lastModified();

SimpleDateFormat format =

new SimpleDateFormat(

"yyyy-MM-dd HH:mm:ss");

System.out.println(format.format(time));

System.out.println(file.canWrite());

6. delete() 删除one指向的硬盘文件,不能删除有内容的文件夹(文件夹含有子文件或者子文件夹不可以)!

File one = new File("demo", "one");

boolean ok = one.delete();

System.out.println(ok);//true

7. 在Linux上以.开头的文件或文件夹是隐藏的

File file2 = new File(".home");

8. 将file指向的文件夹(文件) 改名为 file2 的名字,返回true表示修改成功

9.  改名 将file指向的文件夹(文件) 改名为 file2 的名字,

返回true表示修改成功,

File file2 = new File("myhome");

File file = new File("home");

boolean success=file.renameTo(file2);

System.out.println(success);

注意:file2一定不能在硬盘中创建,输出false。而file必须是已经创建的文件夹

10. 在文件或者不存在的文件上调用了 listFiles(),底层出现IO错误时候,返回null!

11. 在文件夹上调用listFiles() 方法,返回文件夹的全部内容(子文件、文件夹)

含隐藏文件!返回File类型的数组,元素是文件夹或文件

File myhome=new File("myhome");

File[] files=myhome.listFiles();

System.out.println(Arrays.toString(files));

注意:只输出myhome\job,job下面的子文件夹不会输出

12.

/**

* 计算一个目录中全部文件的总长度,只检索当前目录中的文件总长度,不包含子文件夹

* @param dir 目录名

* @return 文件的总长度

* @throws FileNotFoundException 文件

* 夹不存在,或者不是文件夹时候抛出异常。

*/

public class IOUtils {

public static long size(String dir)

throws FileNotFoundException{

/*

* 创建File对象

* 检查是否存在,抛出异常!

* 检查是否是文件夹! 抛出异常!

* 获取文件的全部内容(子文件、子文件夹)。

* 遍历全部内容。

* 如果是文件(isFile())的时候

* 统计文件的长度。

* 返回统计结果

*/

File file = new File(dir);

//exists 存在

if(! file.exists()){

//抛异常是方法的结束,是不正确结束!

throw new FileNotFoundException(

"文件夹不存在:"+dir);

}

//file已经存在,检查是文件吗

if(file.isFile()){

throw new FileNotFoundException(

"不是文件夹:"+dir);

}

//获取文件夹全部内容(子文件、文件夹)

File[] files = file.listFiles();

//File[] files = file.listFiles(onlyFile);

//统计文件的长度

long count = 0;

for(File f:files){

//f 代表文件夹中的子文件、文件夹

if(f.isFile()){

count+=f.length();

}

//count+=f.isFile()?f.length():0;

}

return count;

}

}

测试

public static void main(String[] args) throws IOException {

// TODO Auto-generated method stub

File file=new File("Demo/demo.txt");

file.createNewFile();

try{

long s=IOUtils.size("Demo/demo.txt");

System.out.println(s);

System.out.println(s/1024D/1024);

}catch(FileNotFoundException e){

e.printStackTrace();

}

}

注意:出现问题,不知道为什么?

Exception in thread "main"java.lang.NullPointerException

long s=IOUtils.size("Demo/demo.txt");

public static void main(String[] args) {

13.  有条件的获取文件夹的内容

//定义过滤器,只接受文件

/**

* 判断给定参数 file 是否是可接受的结果。

* 如果file是需要的对象返回true,否则返回false

*/

FileFilter onlyFile = new FileFilter(){

//accept 接受

public boolean  accept(File file) {

return file.isFile();

}

};

//匿名内部类结束以后

File dir = new File("d:/");

/**

* listFiles 方法会自动的调用 onlyFile

* 中的accept 方法,将满足条件的文件留下

* 来作为结果,不满足的抛弃。

*/

File[] files = dir.listFiles(onlyFile);

for (File file : files) {

//getName 返回文件的名字

System.out.println(file.getName());

}

}

三.问题疑问

1. 获取文件中字节长度,依据是什么?为什么有的文件夹输出是0,有的几个文件夹的输出比较固定?都是

File file3=new File("e:/1.JavaProgram");

long l=file3.length();

System.out.println(l);

System.out.println(l/1024D);

输出:4096   4.0

File file3=new File("e:/1. 0.eclipse");

long l=file3.length();

System.out.println(l);

System.out.println(l/1024D);

输出:0   0.0

答案:File.length()的话如果读取的是一个文件夹  那么字节是不固定的?????

2.以下代码为什么在项目文件夹中刷新显示删除了文件,但是输出file是还有删除的文件,输出结果还是myhome/job/days/day01/am, 但是file5.exists()输出语句返回false

File file5=new File("myhome/job/days/day01/am");

System.out.println(file5.delete());

System.out.println(file5);

System.out.println(file5.exsits());

3.在当前目录下建立三个文件,如果两个文件名拼写相同(大小写不一样时)时,为什么刷新不出后来建立的,但是输出表示已经建立了文件夹,输出:三个true?????

File file=new File("demo");

file.mkdir();

System.out.println(file.exists());

File file1=new File("Demo");

file1.mkdir();

System.out.println(file1.exists());

File file2=new File("mo");

file2.mkdir();

System.out.println(file2.exists());

时间: 2024-08-03 22:36:29

Java学习笔记-File操作(API)的相关文章

Java学习笔记——File类之文件管理和读写操作、下载图片

Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图片 文件和文件夹 相关函数 (boolean) mkdir() 创建此抽象路径名指定的目录  (boolean) mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录. (boolean) delete() 删除此抽象路径名表示的文件或目录 (boolean) createNe

java学习笔记 多线程操作的相关方法

一.判断线程是否启动 isAlive()方法来确定一个线程是否启动 主线程(main)有可能先执行完,此时分线程不受影响 二.线程强制运行 join()方法可以让一个线程强制运行,在此期间,其他线程无法运行,必须等此线程执行完毕才能继续运行 public class Test { public static void main(String[] args) { MyThread mt1 = new MyThread(); Thread thread = new Thread(mt1,"t1&qu

java学习笔记07--日期操作类

java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. [java] view plaincopy public class T { public static void main(String[] args) { Date date  = new Date(); System.out.println("当前日期:"+date); //当前日期:Thu May 16 23:00:57 CST 

Java学习笔记(Java语言规范,API,JDK,IDE)

Java语言规范:java.sun.com/docs/books/jls 三个版本的API:J2SE J2EE J2ME 1. J2SE 客户端独立应用程序或者applet 2. J2EE 服务端应用程序 [Java Servlets&JavaServer Page] 3. J2ME 移动设备变成 JDK为Java开发提供一个开发环境(IDE) Java学习笔记(Java语言规范,API,JDK,IDE)

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位

java学习笔记16--I/O流和文件

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理设备之间的数据传输,对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中 输入/输出流可以从以下几个方面进行分类 从流的方向划分: 输入流.输出流 从流的分工划分: 节点流.处理流 从流的内容划分: 面向字符的流.面向字节的流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对

Linux程序设计学习笔记----网络通信编程API及其示例应用

转载请注明出处, http://blog.csdn.net/suool/article/details/38702855. BSD Socket 网络通信编程 BSD TCP 通信编程流程 图为面向连接的Socket通信的双方执行函数流程.使用TCP协议的通信双方实现数据通信的基本流程如下 建立连接的步骤 1.首先服务器端需要以下工作: (1)调用socket()函数,建立Socket对象,指定通信协议. (2)调用bind()函数,将创建的Socket对象与当前主机的某一个IP地址和TCP端口

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

java学习笔记14--多线程编程基础1

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为一个进程,例如:用字处理软件编辑文稿时,同时打开mp3播放程序听音乐,这两个独立的程序在同时运行,称为两个进程 进程要占用相当一部分处理器时间和内存资源 进程具有独立的内存空间 通信很不方便,编程模型比较复杂 多线程 一个程序中多段代码同时并发执行,称为多线程,线程比进程开销小,协作和数据交换容易