您的当前位置:首页正文

File类,io,java,流

2024-04-24 来源:榕意旅游网
流

学习目标:

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/或者其他参数);完成 ·通过打印流套接输出流 来完成类似输出流的功能 即向文件里面书写内容

因篇幅问题不能全部显示,请点此查看更多更全内容