java——文件管理与输入输出
数据如何进行持久化存储?
使用文件进行存储。
面向对象程序是如何完成数据的持久化存储?
面向对象程序是通过流将数据保存到文件的。
什么是流?
是指同一台计算机或网络中不同计算机之间有序运动着的数据序列。Java把这些不同来源和目标的数据都统一抽象为数据流。(数据流可分为输入流和输出流)
输入流和输出流提供了一条通道程序,用户可以使用这条通道读取源中的数据或把数据传送到目的地。
输入流的指向称为源,程序从指向源的输入流中读取源中的数据;
输出流的指向是数据要去的一个目的地,程序通过向输出流中写入数据把数据传送到目的地。流式输入输出的特点:
数据的获取和发送沿数据序列的顺序进行,即每一个数据都必须等待排在它前面的数据,等前面的数据读入或送出之后才能被读写。
Java中的流:
Java语言中提供了比较完善的处理输入输出数据的功能,实现这些I/O操作的类和接口都在java.io包中。java.io包中提供了各种各样的输入输出流类,它们都是Object类的直接子类,每一个流类代表一种特定的输入或输出流。
字节流:读写以字节为单位进行。基本输入流(InputStream)和基本输出流(OutputStream);
字符流:读写以字符(Unicode)为单位进行。基本输入流(Reader)和基本输出流(Writer)。
文件管理类
File类的介绍
File类的对象主要用来获取文件本身的一些信息,例如文件所在的目录、文件的长度、文件读写权限等,不涉及对文件的读写操作。
构造方法如下:
File(String pathname)
File(String parent, String childe) \\\\参数parent表示目录或文件所在路径,参数child表示目录或文件名称。
File(File parent, String child)
File(URI uri) //使用URI创建一个文件
public File(String pathname):创建一个对应于参数pathname的File类对象。参数pathname是包含目录和文件名的字符串。如果没有文件名,则代表目录
File file1 = new File("c:\\\\....") \\\\创建一个指向目录的(或文件的)文件类对象
public File(File parent, String child):该构造函数与上面一个的不同之处,在于将parent的参数类型由String变为File,代表parent是一个已经创建了的File类文件对象(指向目录)。
File file1=new File("d:\\\\javaex\\\\chapter10");
File file2=new File(file1, "example.java");
File 类常用方法
boolean canExecute() //执行判定
boolean canRead() //可读性判定
boolean canWrite() //可写性判定
boolean exists() //存在性判定
boolean isAbsolute() //相对与绝对路径判定
boolean isDirectory() //目录文件判定
boolean isFile() //普通文件判定
boolean isHidden() //文件隐藏属性判定boolean delete() //删除
boolean mkdir() //创建一个目录
boolean mkdirs() //创建多个目录
boolean renameTo(File dest) //重命名文件boolean setLastModified(long time) //设置时间属性(拥有者)
boolean setReadOnly() //设置只读属性(拥有者)
boolean setWritable(boolean writable) //设置可写属性(拥有者)String getName() //返回文件名
String getParent() //返回父路径
File getParentFile() //返回父路径的文件对象
String getPath() //返回文件的路径
File getAbsoluteFile() //返回绝对路径的文件对象
String getAbsolutePath() //返回绝对路径
long lastModified() //返回文件的最后修改时间
long length() //返回文件长度String[] list()
//列出当前目录文件下的所有文件,返回字符串数组
File[] listFiles()
//列出当前目录文件下的所有文件,返回文件对象数组
例:查看指定目录下的所有的文件及目录
//列出"d:\\\\java_dev"目录下的所有文件及目录
File dir=new File("d:\\\\java_dev");
String[] filename=dir.list();
for(int i=0;i<filename.length;i++){
System.out.println(filename[i]);
}
如何运行本地上的软件?
//运行本地机上的暴风影音软件,软件目录要随具体情况改变
Runtime ec=Runtime.getRuntime();
try {
ec.exec("D:\\\\Program Files
\\\\Baofeng\\\\StormPlayer
\\\\StormPlayer.exe");
} catch (IOException e) {
e.printStackTrace();
}
字节流
字节输入流
FileInputStream类创建的对象被称为文件字节输入流, FileInputStream 类是抽象类InputStream的直接子类,该类的所有方法都是从InputStream类继承而来的。
FileInputStream类对象的创建
可以通过FileInputStream类的构造方法完成FileInputStream类对象的创建,要构造一个该流类对象,所连接的文件必须存在而且是可读的。
public FileInputStream(String name) throws
FileNotFoundException;
public FileInputStream(File file) throws
FileNotFoundException;
文件读取的方法
FileInputStream类对象可以调用其read方法,完成从指定文件输入数据工作,即读取文件,以下方法到达文件末尾都会返回-1
public int read() throws IOException
//读取源中单个字节数据,返回0~255的整数。
public int read(byte[] b) throws IOException
//读取b.length个字节,并将读取的字节存放
//到数组b中,方法返回实际读取的字节个数。
public int read(byte[] b, int off, int len)
throws IOException
//读取len个字节, off是首字节在数组中的存
//放位置,方法返回实际读取的字节个数。