public class File extends Object implements Serializable, Comparable<File>
public boolean createNewFile()throws IOException
因为路径名的分隔符在不同操作系统不同:
如Windows下“\”,unix下“/”。所以在操作文件是注意分隔符,使用File.separator常量(分隔符)。
public boolean delete()
删除前先判断,文件是否存在:
public boolean exists()
一般来说,所有操作不会立刻执行,因为java是通过JVM与底层进行交互的,所以所有的操作要经过JVM完成,可能产生延迟。
对于文件后缀,可有可无。
public boolean mkdir()
显示文件名:
public String[] list() //返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录
显示文件路径:
public File[] listFiles() //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件
public boolean isDirectory() //测试此抽象路径名表示的文件是否是一个目录
应该采用递归的调用形式。
import java.io.File; import java.io.IOException; public class FileDemo { public static void main(String[] args) { // TODO Auto-generated method stub File file = new File("."); printFile(file); } public static void printFile(File file){ if(file!=null){ if(file.isDirectory()){ File[] f=file.listFiles(); if(file!=null){ for(File i:f){ printFile(i); } } }else{ System.out.println(file); } } } }
File类是在java.io包中唯一与文件本身有关的
可以使用File类创建、删除等常见的文件操作
在使用File类指定路径的时候一定要注意操作系统间的差异,尽量使用separator进行分割。
public RandomAccessFile(File file, String mode)throws FileNotFoundException
实例化此类时候需要传递File类,告诉程序应该操作的是哪个文件,之后有一个模式,文件的打开模式;常用的:
r:读模式
rw:读写,如果使用此模式,如果文件不存在,则自动创建。
在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就需要使用输出流完成。
程序中的输入输出都是以流到的形式保存的,流中保存的实际上全都是字节文件。
java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使用的是InputStream。在字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。
文件操作的主要流程:
使用File类打开一个文件
通过字节流或字符流的子类,指定输出的位置(四个操作类都是抽象类)
进行读/写操作
关闭输入/输出(IO属于资源操作)
字节流主要是操作byte类型的数据,以byte数组为准,主要操作类就是OutputStream、InputStream
输出流OutputStream:是整个IO包里字节输出流的最大父类,此类的定义:
public abstract class OutputStream extends Object implements Closeable, Flushable
如果要想使用此类,则必须首先通过子类实例化对象,如果现在要操作的是一个文件,则可以使用:FileOutputStream类。通过向上转型之后,可以为OutputStream实例化。
public class FileOutputStream extends OutputStream
在文件本来不存在时,会自动创建一个文件。默认覆盖。
追加的话用另一个构造方法:
public FileOutputStream(File file,boolean append) throws FileNotFoundException
将append值设置为true这表示在文件后面追加。直接添加,没有换行。想要换行则在追加内容前加"\r\n"
public abstract class InputStream extends Object implements Closeable
public class FileInputStream extends InputStream
想知道文件大小,File类的方法:
public long length()
定义byte数组
byte[] b = new byte[(int)file.length()]
读取:
public int read(byte[] b) throws IOException
返回的int实际为读取byte[]的长度。可用String(b)建立字符串可标准输出。
public int read()throws IOException //逐个读
以上两个方法只适合知道输入流大小的情况。
不知文件大小时,可用while((temp=input.read())!=-1)判断
一般在操作输入输出内容时需要使用字节流或字符流,但是有些时候需要将字符流变为字节流的形式,或者将字节流变为字符流的形式,所以需要转换流。
java.lang.Object java.io.Writer java.io.OutputStreamWriter
java.lang.Object java.io.Reader java.io.InputStreamReader
OutoutStreamWriter:将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象
InputStreamReader:将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。
因为OutputStreamWriter中接受的类型时OutputStream,只要是字节输出流都可以使用字符的形式操作,而InputStreamReader中接受的类型时InputStream,只要是字节的输入流都可以使用字符的输入流操作。
java.lang.Object java.io.Writer java.io.OutputStreamWriter java.io.FileWriter
java.lang.Object java.io.Reader java.io.InputStreamReader java.io.FileReader
不管如何,虽然以字符的输出流形式操作了字节流的输出流,但实际上还是以字节的形似输出,而字符的输入流,虽然是以字符的形似操作,但实际上还是使用的字节流,也就是说,传输或者是从文件中读取数据的时候,文件里真正保存的数据永远是字节。