学习目标:
1.File类(概念,格式,使用) 2.IO流
File.speparator的作用判断在不是同的系统中斜杠的方向 在windows中斜杠的方向是向右斜的\\\\ 在Linux 中斜杠的方向是向左斜的'/'; 要操作一个文件,必须要找到这个文件
在Java中,只有File类能表示一个文件,File的属性就是文件的路径,虚拟机会根据File类的参数找到指定的文件,找到文件后可以用File类的方法进行操作!
File类:它直接处理文件和文件系统。也就是说,File类没有指定信息怎样从文件读取或向文件存储;它描述了文件本身的属性。 ·File对象用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径。
·File还浏览子目录层次结构。很多程序中文件是数据的根源和目标。尽管它们在小应用程序中因为安全原因而受到严格限制,文件仍是存储固定和共享信息的主要资源
构造函数
public class FileDemo {
public static void main(String[] args){ //构造函数File(String pathname) File f1 =new File(\"c:\\\\abc\\\\1.txt\"); //File(String parent,String child) File f2 =new File(\"c:\\\\abc\ //File(File parent,String child)
File f3 =new File(\"c:\"+File.separator+\"abc\");//separator 跨平台分隔符
File f4 =new File(f3,\"3.txt\"); System.out.println(f1);//c:\\abc\\1.txt } } 创建方法
1.boolean createNewFile() 不存在返回true 存在返回false 2.boolean mkdir() 创建目录 3.boolean mkdirs() 创建多级目录
删除方法
1.boolean delete()
2.boolean deleteOnExit() 文件使用完成后删除 import java.io.File; import java.io.IOException; public class FileDemo2 {
public static void main(String[] args){ File f =new File(\"d:\\\\1.txt\"); try {
System.out.println(f.createNewFile());//当文件存在时返回false
System.out.println(f.delete());//当文件不存在时返回false } catch (IOException e) {
// TODO Auto-generated catch block e.printStackTrace(); } } } 判断方法
1.boolean canExecute()判断文件是否可执行 2.boolean canRead()判断文件是否可读 3.boolean canWrite() 判断文件是否可写 4.boolean exists() 判断文件是否存在 5.boolean isDirectory() 6.boolean isFile() 7.boolean isHidden()
8.boolean isAbsolute()判断是否是绝对路径 文件不存在也能判断
获取方法
1.String getName() 2.String getPath() 3.String getAbsolutePath()
4.String getParent()//如果没有父目录返回null 5.long lastModified()//获取最后一次修改的时间 6.long length()
7.boolean renameTo(File f) 8.File[] liseRoots()//获取机器盘符 9.String[] list()
10.String[] list(FilenameFilter filter) 列出磁盘下的文件和文件夹 public class FileDemo3 {
public static void main(String[] args){ File[] files =File.listRoots(); for(File file:files){
System.out.println(file); if(file.length()>0){
String[] filenames =file.list(); for(String filename:filenames){ System.out.println(filename); } } } } }
文件过滤
import java.io.File;
import java.io.FilenameFilter; public class FileDemo4 {
public static void main(String[] args){ File[] files =File.listRoots(); for(File file:files){
System.out.println(file); if(file.length()>0){
String[] filenames =file.list(new FilenameFilter(){ //file 过滤目录 name 文件名
public boolean accept(File file,String filename){ return filename.endsWith(\".mp3\"); } });
for(String filename:filenames){ System.out.println(filename); } } } }
File[] listFiles()
File[] listFiles(FilenameFilter filter) 利用递归列出全部文件 public class FileDemo5 {
public static void main(String[] args){
File f =new File(\"e:\\\\音樂\"); showDir(f); }
public static void showDir(File dir){ System.out.println(dir); File[] files =dir.listFiles(); for(File file:files){ if(file.isDirectory()) showDir(file); else
System.out.println(file); } } } 移动文件
找出d盘下所有的 .java 文件,拷贝至 c:\\jad 件的类型由.java 修改为.jad 。 public class Test5 {
public static void main(String[] args){ File f1 = new File(\"d:\\\\\");
目录下,并将所有文 moveFile(f1); }
public static void moveFile(File dir){ File[] files=dir.listFiles(); for(File file:files){ if(file.isDirectory()) moveFile(file); else{
if(file.getName().endsWith(\".java\")) file.renameTo(new File(\"c:\\\\jad\\\\\"+
file.getName().substring(0,file.getName().lastIndexOf('.'))+\".jad\")); } } } }
·一定先创建目录再建立文件
2.流
·用于处理设备之间的数据传输, ·java对数据的操作是通过流的方式, ·java用于操作流的对象都在io包中, ·流按操作数据分:字节流与字符流, ·按流向分:输入流、输出流
·字节流的两个基类:InputStream,OutputStream InputStream的子类:FileInputStream OutputStream的子类:FileOutputStream ·字符流的两个基类:Reader,Writer
Reader的子类:FileReader Writer的子类:FileWriter 字节流与字符流的区别:
·字节流是一个字节一个字节来传输的可以传输音频、视频和图片,字符流是一个字符一个字符来传输的。(一个字符=两个字节) ·字节流输出:通过程序可以直接操作文件。字符流输出:数据先放到缓存之后再从缓存写入文件。(缓存=内存) ·两者操作文件结束后不关闭文件
实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
什么叫缓冲区?
缓冲区可以简单地理解为一段内存区域。可以简单地把缓冲区理解为一段特殊的内存。某些情况下,如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。
使用字节流好还是字符流好?
使用字节流更好。因为所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节流使用较为广泛。
对象流:
·ObjectInputStream 输入流 读取数据 ·ObjectOutputStream 输出流 写入数据
·对象流所写的对象 必须要实现对象的序列化 即实现 Serializable接口
·对象流 必须依托OutputStream 的子类去实现实际的功能 ·void writeObject(Object obj) 写文件 无返回值 ·Object readObject() 读文件 返回值类型为Object 缓冲流:
·缓冲流是一种过滤流
·常用的是BufferedInputStream和BufferedOutputStream,这两个类分别是InputStream和OutputStream 的子类。
使用流读写数据过程:输入文件->操作系统内存->JVM内存->代码变量->JVM内存->操作系统内存->输出文件. 举例:缓冲流完成MP3的复制 打印流:
·PrintStream:是I/O(输入/输出)流的一种,属于输出流 ·创建新的打印流,就是创建一个新的PrintStream对象,通过 new PrintStream(OutStream/或者其他参数);完成 ·通过打印流套接输出流 来完成类似输出流的功能 即向文件里面书写内容
因篇幅问题不能全部显示,请点此查看更多更全内容