文件(File)是最常见的数据源之一,在程序中经常需要将数据存储到文件中,也经常需要根据需要从指定的文件中进行数据的读取。
1 文件的路径
每个文件以一个文件路径和文件名称进行表示,在需要访问该文件的时,只需要知道该文件的路径以及文件的全名即可。在不同的操作系统环境下,文件路径的表示形式是不一样的,例如在Windows操作系统中一般的表示形式为C:\windows\system,而Unix上的表示形式为/user/my。所以如果需要让Java程序能够在不同的操作系统下运行,书写文件路径时还需要比较注意。
绝对路径是指书写文件的完整路径,例如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”,这些都需要在代码中注意。
2 File类
File类包含了大部分的文件操作方法,对象代表文件或文件夹,也就是文件的路径。
创建文件对象方法:(1) public File(String filepath)
File f1 = new File(“d:\\myfile\a.txt”); //绝对路径
File f2 = new File(“a.txt”); //相对路径
File f3 = new File(“d:\\myfile”); //打开文件夹
(2) public File(String parent, String child) 父路径与子路径结合代表文件的完整路径
File f1 = new File(“d:\\myfile\\“,”a.txt”); 3
创建文件 public boolean createNewFile()
创建文件夹 public boolean mkdirs() 当前路径中包含的父目录不存在时,也会自动根据需要创建。
public boolean mkdir() 父目录不存在时不会创建,假设d盘下只有一个test文件夹,则创建d:\test\abc文件夹则成功,如果创建d:\a\b文件夹则创建失败,因为该路径中d:\a文件夹不存在
判断文件是否存在 public boolean exists()
删除当前文件或文件夹 public boolean delete()如果删除的是文件夹,则该文件夹必须为空,如果需要删除一个非空的文件夹,则需要首先删除该文件夹 内部的每个文件和文件夹,然后在可以删除
获得当前文件或文件夹的绝对路径 public String getAbsolutePath()
获得当前文件或文件夹的名称 public String getName()
获得当前路径中的父路径 public String getParent()
判断当前File对象是否是目录 public boolean isDirectory()
判断当前File对象是否是文件 public boolean isFile()
返回文件存储时占用的字节数 public long length()
返回当前文件夹下所有的文件名和文件夹名称 public String[] list()
修改文件名 public boolean renameTo(File dest)
设置当前文件或文件夹为只读 public boolean setReadOnly()
将文件中的数据读入程序,是将外部的数据传入程序中,应该使用输入流InputStream或Reader从文件中读入数据,输入流对应的子类FileInputStream或FileReader。读取文件 的步骤:将文件中的数据转换为流(创建流对象),读取流内部的数据,关闭流对象。
3 FileInputStream 类
以字节为单位的流处理。字节序列:二进制数据。与编码无关,不存在乱码问题。
FileInputStream 类的主要方法有:
read (), read ( byte[] b ), read ( byte[],int off,int len ) ,available();
4 InputStreamReader 类
以文本格式输入 / 输出,可以指定编码格式; InputStreamReader可以将流如stream转换成字符流方式,是reader和stream之间的桥梁。
一般用法:
InputStreamReader isr = new InputStreamReader(new FileInputStream(""F:/user_filter.txt"));
while((ch = isr.read())!=-1)
{ System.out.print((char)ch);
}
5 FileReader 类
InputStreamReader 类的子类,所有方法(read ()等)都从父类 InputStreamReader 中继承来; 该类与它的父类 InputStreamReader 的主要不同在于构造函数,主要区别也就在于构造函数!从 InputStreamReader 的构造函数中看到,参数为 InputStream 和编码方式,可以看出,当要指定编码方式时,必须使用 InputStreamReader 类;而 FileReader 构造函数的参数与 FileInputStream 同,为 File 对象或表示 path 的 String 。
FileInputStream 类与 FileReader 类的区别:
FileInputStream :以字节流方式读取;
FileReader :把文件转换为字符流读入;
一般用法:
<pre name="code" class="java">FileReader fr = new FileReader("<span style="font-family: Calibri;">F:/user_filter.</span>txt");
char[] buffer = new char[1024];
int ch = 0;
while((ch = fr.read())!=-1 )
{
System.out.print((char)ch);
}
6 InputStreamReader 类
BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取分行文本很适合,BufferedReader是针对Reader的,不直接针对文件,也不是只针对文件读取。
一般用法:
InputStreamReader isr=new InputStreamReader(new FileInputStream("F:/user_filter.csv"));
BufferedReader reader=new BufferedReader(isr);
String line="";
line=reader.readLine();
while((line=reader.readLine())!=null)
String[] parts = line.split(",");
reader.close();
7 FileWritter
<span style="background-color: rgb(255, 255, 255); font-family: Calibri; text-indent: 21pt;">FileWritter, 字符流写入字符到文件。默认情况下,它会使用新的内容取代所有现有的内容,然而,当指定一个true (布尔)值作为FileWritter构造函数的第二个参数,它会保留现有的内容,并追加新内容在文件的末尾。</span>
8 BufferedWriter
缓冲字符(BufferedWriter )是一个字符流类来处理字符数据。不同于字节流(数据转换成字节),你可以直接写字符串,数组或字符数据保存到文件。
File file=new File(filepath1);//创建存储路径
if(!file.exists())
file.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(file,true));//ture表示文件追加,缺省时为文件重写
for(int i=0;i<5;i++)
bw.write(part[i]+",");
bw.write(part[5]);
bw.newLine();
bw.close();
9 FileOutputStream
文件输出流是一种用于处理原始二进制数据的字节流类。为了将数据写入到文件中,必须将数据转换为字节,并保存到文件。