Java编程那些事儿86——文件操纵之File类利用
当前位置:以往代写 > JAVA 教程 >Java编程那些事儿86——文件操纵之File类利用
2019-06-14

Java编程那些事儿86——文件操纵之File类利用

Java编程那些事儿86——文件操纵之File类利用

副标题#e#

11.3 I/O类利用

由于在IO操纵中,需要利用的数据源有许多,作为一个IO技能的初学者,从读写文件开始进修IO技能是一个较量好的选择。因为文件是一种常见的数据源,并且读写文件也是措施员举办IO编程的一个根基本领。本章IO类的利用就从读写文件开始。

11.3.1 文件操纵

文件(File)是最常见的数据源之一,在措施中常常需要将数据存储到文件中,譬喻图片文件、声音文件等数据文件,也常常需要按照需要从指定的文件中举办数据的读取。虽然,在实际利用时,文件都包括一个的名目,这个名目需要措施员按照需要举办设计,读取已有的文件时也需要熟悉对应的文件名目,才气把数据从文件中正确的读取出来。

文件的存储介质有许多,譬喻硬盘、光盘和U盘等,由于IO类设计时,从数据源转换为流工具的操纵由API实现了,所以存储介质的差异对付措施员来说是透明的,和实际编写代码无关。

11.3.1.1 文件的观念

文件是计较机中一种根基的数据存储形式,在实际存储数据时,假如对付数据的读写速度要求不是很高,存储的数据量不是很大时,利用文件作为一种耐久数据存储的方法是较量好的选择。

存储在文件内部的数据和内存中的数据差异,存储在文件中的数据是一种“耐久存储”,也就是当措施退出或计较构造机今后,数据照旧存在的,而内存内部的数据在措施退出或计较构造机今后,数据就丢失了。

在差异的存储介质中,文件中的数据都是以必然的顺序依次存储起来,在实际读取时由硬件以及操纵系统完成对付数据的节制,担保措施读取到的数据和存储的顺序保持一致。

每个文件以一个文件路径和文件名称举办暗示,在需要会见该文件的时,只需要知道该文件的路径以及文件的全名即可。在差异的操纵系统情况下,文件路径的暗示形式是纷歧样的,譬喻在Windows操纵系统中一般的暗示形式为C:\windows\system,而Unix上的暗示形式为/user/my。所以假如需要让Java措施可以或许在差异的操纵系统下运行,书写文件路径时还需要较量留意。

11.3.1.1.1 绝对路径和相对路径

绝对路径是指书写文件的完整路径,譬喻d:\java\Hello.java,该路径中包括文件的完整路径d:\java以及文件的全名Hello.java。利用该路径可以独一的找到一个文件,不会发生歧义。可是利用绝对路径在暗示文件时,受到的限制很大,且不能在差异的操纵系统下运行,因为差异操纵系统下绝对路径的表达形式存在差异。

相对路径是指书写文件的部道路径,譬喻\test\Hello.java,该路径中只包括文件的部道路径\test和文件的全名Hello.java,部道路径是指当前路径下的子路径,譬喻当前措施在d:\abc下运行,则该文件的完整路径就是d:\abc\test。利用这种形式,可以越发通用的代表文件的位置,使得文件路径发生必然的机动性。

在Eclipse项目中运行措施时,当前路径是项目标根目次,譬喻事情空间存储在d:\javaproject,当前项目名称是Test,则当前路径是:d:\javaproject\Test。在节制台下面运行措施时,当前路径是class文件地址的目次,假如class文件包括包名,则以该class文件最顶层的包名作为当前路径。

别的在Java语言的代码内部书写文件路径时,需要留意巨细写,巨细写需要保持一致,路径中的文件夹名称区分巨细写。由于’\’是Java语言中的非凡字符,所以在代码内部书写文件路径时,譬喻代表“c:\test\java\Hello.java”时,需要书写成“c:\\test\\java\\Hello.java”或“c:/test/java/Hello.java”,这些都需要在代码中留意。

11.3.1.1.2 文件名称

文件名称一般回收“文件名.后缀名”的形式举办定名,个中“文件名”用来暗示文件的浸染,而利用后缀名来暗示文件的范例,这是当前操纵系统中常见的一种形式,譬喻“readme.txt”文件,个中readme代表该文件时说明文件,而txt后缀名代表文件时文本文件范例,在操纵系统中,还会自动将特命名目标后缀名和对应的措施关联,在双击该文件时利用特定的措施打开。

其实在文件名称只是一个标示,和实际存储的文件内容没有一定的接洽,只是利用这种方法利便文件的利用。在措施中需要存储数据时,假如本身设计了特定的文件名目,则可以自界说文件的后缀名,来标示本身的文件范例。

和文件路径一样,在Java代码内部书写文件名称时也区分巨细写,文件名称的巨细写必需和操纵系统中的巨细写保持一致。

别的,在书写文件名称时不要健忘书写文件的后缀名。


#p#副标题#e#

11.3.1.2 File类

为了很利便的代表文件的观念,以及存储一些对付文件的根基操纵,在java.io包中设计了一个专门的类——File类。

#p#分页标题#e#

在File类中包括了大部门和文件操纵的成果要领,该类的工具可以代表一个详细的文件或文件夹,所以以前曾有人发起将该类的类名修改成FilePath,因为该类也可以代表一个文件夹,更精确的说是可以代表一个文件路径。

下面先容一下File类的根基利用。

1、File工具代表文件路径

File类的工具可以代表一个详细的文件路径,在实际代表时,可以利用绝对路径也可以利用相对路径。

下面是建设的文件工具示例。

public File(String pathname)

该示例中利用一个文件路径暗示一个File类的工具,譬喻:

File f1 = new File(“d:\\test\\1.txt”);

File f2 = new File(“1.txt”);

File f3 = new File(“e:\\abc”);

这里的f1和f2工具别离代表一个文件,f1是绝对路径,而f2是相对路径,f3则代表一个文件夹,文件夹也是文件路径的一种。

public File(String parent, String child)

也可以利用父路径和子路径团结,实现代表文件路径,譬喻:

File f4 = new File(“d:\\test\\”,”1.txt”);

这样代表的文件路径是:d:\test\1.txt。

2、File类常用要领

File类中包括了许多得到文件或文件夹属性的要领,利用起来较量利便,下面将常见的要领先容如下:

a、createNewFile要领

public boolean createNewFile() throws IOException

该要领的浸染是建设指定的文件。该要领只能用于建设文件,不能用于建设文件夹,且文件路径中包括的文件夹必需存在。

b、delect要领

public boolean delete()

该要领的浸染是删除当前文件或文件夹。假如删除的是文件夹,则该文件夹必需为空。假如需要删除一个非空的文件夹,则需要首先删除该文件夹内部的每个文件和文件夹,然后在可以删除,这个需要书写必然的逻辑代码实现。

c、exists要领

public boolean exists()

该要领的浸染是判定当前文件或文件夹是否存在。

d、getAbsolutePath要领

public String getAbsolutePath()

该要领的浸染是获恰当前文件或文件夹的绝对路径。譬喻c:\test\1.t则返回c:\test\1.t。

e、getName要领

public String getName()

该要领的浸染是获恰当前文件或文件夹的名称。譬喻c:\test\1.t,则返回1.t。

#p#副标题#e#

f、getParent要领

public String getParent()

该要领的浸染是获恰当前路径中的父路径。譬喻c:\test\1.t则返回c:\test。

g、isDirectory要领

public boolean isDirectory()

该要领的浸染是判定当前File工具是否是目次。

h、isFile要领

public boolean isFile()

该要领的浸染是判定当前File工具是否是文件。

i、length要领

public long length()

该要领的浸染是返回文件存储时占用的字节数。该数值得到的是文件的实际巨细,而不是文件在存储时占用的空间数。

j、list要领

public String[] list()

该要领的浸染是返回当前文件夹下所有的文件名和文件夹名称。说明,该名称不是绝对路径。

k、listFiles要领

public File[] listFiles()

该要领的浸染是返回当前文件夹下所有的文件工具。

l、mkdir要领

public boolean mkdir()

该要领的浸染是建设当前文件文件夹,而不建设该路径中的其它文件夹。假设d盘下只有一个test文件夹,则建设d:\test\abc文件夹则乐成,假如建设d:\a\b文件夹则建设失败,因为该路径中d:\a文件夹不存在。假如建设乐成则返回true,不然返回false。

m、mkdirs要领

public boolean mkdirs()

该要领的浸染是建设文件夹,假如当前路径中包括的父目次不存在时,也会自动按照需要建设。

n、renameTo要领

public boolean renameTo(File dest)

该要领的浸染是修改文件名。在修改文件名时不能改变文件路径,假如该路径下已有该文件,则会修改失败。

o、setReadOnly要领

public boolean setReadOnly()

该要领的浸染是配置当前文件或文件夹为只读。

#p#副标题#e#

3、File类根基示例

以上各要领实现的测试代码如下:

import java.io.File;

/**

* File类利用示例

*/

public class FileDemo {

 public static void main(String[] args) {

  //建设File工具

  File f1 = new File("d:\\test");

  File f2 = new File("1.txt");

  File f3 = new File("e:\\file.txt");

  File f4 = new File("d:\\","1.txt");

  //建设文件

  try{

   boolean b = f3.createNewFile();

  }catch(Exception e){

   e.printStackTrace();

  }

  //判定文件是否存在

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

  //得到文件的绝对路径

  System.out.println(f3.getAbsolutePath());

  //得到文件名

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

  //得到父路径

  System.out.println(f3.getParent());

  //判定是否是目次

  System.out.println(f1.isDirectory());

  //判定是否是文件

  System.out.println(f3.isFile());

  //得到文件长度

  System.out.println(f3.length());

  //获恰当前文件夹下所有文件和文件夹名称

  String[] s = f1.list();

  for(int i = 0;i < s.length;i++){

   System.out.println(s[i]);

  }

  //得到文件工具

  File[] f5 = f1.listFiles();

  for(int i = 0;i < f5.length;i++){

   System.out.println(f5[i]);

  }

  //建设文件夹

  File f6 = new File("e:\\test\\abc");

  boolean b1 = f6.mkdir();

  System.out.println(b1);

  b1 = f6.mkdirs();

  System.out.println(b1);

  //修改文件名

  File f7 = new File("e:\\a.txt");

  boolean b2 = f3.renameTo(f7);

  System.out.println(b2);

  //配置文件为只读

  f7.setReadOnly();

 }

}

#p#副标题#e#

4、File类综合示例

#p#分页标题#e#

下面以两个示例演示File类的综合利用。第一个示例是显示某个文件夹下的所有文件和文件夹,道理是输出当前名称,然后判定当前File工具是文件照旧文件夹,假如则得到该文件夹下的所有子文件和子文件夹,并递归挪用该要领实现。第二个示例是删除某个文件夹下的所有文件和文件夹,道理是判定是否是文件,假如是文件则直接删除,假如是文件夹,则得到该文件夹下所有的子文件和子文件夹,然后递归挪用该要领处理惩罚所有子文件和子文件夹,然后将空文件夹删除。则测试时审慎利用第二个要领,以免删除本身有用的数据文件。示例代码如下:

import java.io.File;

/**

* 文件综合利用示例

*/

public class AdvanceFileDemo {

 public static void main(String[] args) {

  File f = new File("e:\\Book");

  printAllFile(f);

  File f1 = new File("e:\\test");

  deleteAll(f1);

 }

 /**

 * 打印f路径下所有的文件和文件夹

 * @param f 文件工具

 */

 public static void printAllFile(File f){

  //打印当前文件名

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

  //是否是文件夹

  if(f.isDirectory()){

   //得到该文件夹下所有子文件和子文件夹

   File[] f1 = f.listFiles();

   //轮回处理惩罚每个工具

   int len = f1.length;

   for(int i = 0;i < len;i++){

    //递归挪用,处理惩罚每个文件工具

    printAllFile(f1[i]);

   }

  }

 }

 /**

 * 删除工具f下的所有文件和文件夹

 * @param f 文件路径

 */

 public static void deleteAll(File f){

  //文件

  if(f.isFile()){

   f.delete();

  }else{ //文件夹

   //获恰当前文件夹下的所有子文件和子文件夹

   File f1[] = f.listFiles();

   //轮回处理惩罚每个工具

   int len = f1.length;

   for(int i = 0;i < len;i++){

    //递归挪用,处理惩罚每个文件工具

    deleteAll(f1[i]);

   }

   //删除当前文件夹

   f.delete();

  }

 }

}

关于File类的利用就先容这么多,其它的要领和利用时需要留意的问题还需要多举办操练和实际利用。

    关键字:

在线提交作业