`
huangfeiNetJava
  • 浏览: 39566 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

文件操作和IO总结

 
阅读更多

File类详解:

所在包:java.io

       用处:可以通过File对象的方法创建文件对象、删除文件、查找文件,判断文件是目录还是正式文件。

 

文件系统的命名规则:

1.     文件的全名包含文件的路径名和扩展名,单独讲一个文件名是,为只带扩展名的文件名,不含路径。

2.     同一目录下不可能存在同名的目录和真实文件,系统主要有目录类型的文件和真是文件两种,真是文件可以没有扩展名,还有第三种我们不需要就是的虚拟内存文件。

3.     相对目录:指不一路径分隔符开头的文件路径

绝对目录:指以根目录开头的路径,以盘符开头的目录都是绝对目录

当前目录:指相对于程序运行时的目录算起的相对路径

4.     目录分隔符和路径分隔符在liunxwin平台上是不同的,前者为“/”和“:”,后者为“\”和“;”,所以应该使用File类提供的相应属性值。

(注意:能用相对路径的就不要用绝对路径以增强可移植性。)

 

 

File类构造方法:

File(File parent, String child)
          
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

File(String pathname)
          
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

File(String parent, String child)
          
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

File(URI uri)
          
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

 

 

File类常用的方法:

 boolean

delete()
          
删除此抽象路径名表示的文件或目录

boolean

equals(Object obj)
          
测试此抽象路径名与给定对象是否相等。

 boolean

exists()
          
测试此抽象路径名表示的文件或目录是否存在。

 

 File

getAbsoluteFile()
          
返回此抽象路径名的绝对路径名形式。

 String

getAbsolutePath()
          
返回此抽象路径名的绝对路径名字符串。

 long

getFreeSpace()
          
返回此抽象路径名指定的分区中未分配的字节数。

 String

getName()
          
返回由此抽象路径名表示的文件或目录的名称。

 String

getPath()
          
将此抽象路径名转换为一个路径名字符串。

 boolean

isDirectory()
          
测试此抽象路径名表示的文件是否是一个目录。

 boolean

isFile()
          
测试此抽象路径名表示的文件是否是一个标准文件。

 long

length()
          
返回由此抽象路径名表示的文件的长度。

static File[]

listRoots()
          
列出可用的文件系统根。

 boolean

mkdir()
          
创建此抽象路径名指定的目录。

 

 

代码示例:

实现功能:文件创建和删除,打印目录和文件

package lesson11;

 

import java.io.File;

public class FileTest{

 

/**

 * @param args

 */

public static void main(String[] args) {

    FileTest ft = new FileTest();

    ft.listRoots();

ft.testCreateAndDelete("D:/Java/Java程序/StudyJava/ NetJava/src/lesson11/Text.txt"); // 路径可变

    ft.printDir("src");

// 列出计算机上的根目录

public void listRoots() {

    // 直接调用File

    File[] lf = File.listRoots();

    System.out.println("磁盘上目录的个数是:" + lf.length);

    for (int i = 0; i < lf.length; i++) {

    System.out.println("" + i + "个目录是" + lf[i].getAbsolutePath());

    }

}

 

// 测试文件创建与删除

public void testCreateAndDelete(String fileName) {

    // 通过传入的名字构造File对象

    File temFile = new File(fileName);

    // 判断文件是否存在

    if (temFile.exists()) {

        if (temFile.isDirectory()) {

System.out.println("这是一个目录:" + temFile.getAbsolutePath());

       }

       if (temFile.isFile()) {

           prinFileAttr(temFile);

           // 删除文件

           temFile.delete();

           String theName = temFile.getName();

           String absPath = temFile.getAbsolutePath();

           System.out .println("文件已删除,名字是:" + theName + " 绝对路径是:" + absPath);

           }

       } else {

           try {

           temFile.createNewFile();

            System.out.println("文件已创建!" + temFile.getAbsolutePath());

              // 打印出文件的长度

              prinFileAttr(temFile);

           } catch (Exception ef) {

              System.out.println("创建文件失败");

           }

       }

    }

// 打印出文件的相关属性:长度,文件名,父目录名,是否隐藏文件

public void prinFileAttr(File temf) {

    System.out.println("文件长度是:" + temf.length());

    }

    public int printDir(String dirName){

       //文件计数器

       int count = 0;

       File dirFile = new File(dirName);

       File[] subFile = dirFile.listFiles();

       if(null == subFile||subFile.length==0){

           return 0;

       }

       for(int i=0;i<subFile.length;i++){

           if(subFile[i].isDirectory()){

              String subDir=subFile[i].getAbsolutePath();

              System.out.println("目录:"+subDir);

              count +=printDir(subDir);

           }

           if(subFile[i].isFile()){

              count++;

              String fileName = subFile[i].getAbsolutePath();

              System.out.println("文件:"+fileName);

           }

       }

       return count;

    }

}

 

 

 

 

异常:

Try catch处理机制:

格式:  

     try{

可能抛出异常的代码……

//如果没有问题出现,指向如下代码

(A)        其他计算代码

}catchException ef{

//如果出现异常后执行的代码;

B)出现异常情况的执行代码

}

 

异常信息的分析与程序调试:

1.     try  catch 机制

2.     throws:在方法上抛出异常

例:public void Test() throws Exception(){ 方法体 }

注意:当另外一个方法调用了一个声明为可能抛出异常的方法时,要么将调用这个方法的代码放入try catch块中;要么将调用方法也声明为抛出异常。

3.     如果不想再代码中编写try块,就必须对调用方法做如下声明:  public void Test(){ 

throw new Exception(“”);

}

如果方法体中使用throw关键字抛出了Exception类型(或其子类)的对象,在方法的声明中就必须使用throws关键字声明,throws后面异常类名字必须是throw抛出异常对象的类型或其父类类型---因为永远是自动的。

 

IO流:

在计算机编程中,流就是一个类的对象,很多文件的输入输出操作都以类的成员函数的方式来提供。

计算机中的流其实是一种信息的转换。它是一种有序流,因此相对于某一对象,通常我们把对象接收外界的信息输入(Input)称为输入流,相应地从对象向外输出(Output)信息为输出流,合称为输入/输出流(I/O Streams)。对象间进行信息或者数据的交换时总是先将对象或数据转换为某种形式的流,再通过流的传输,到达目的对象后再将流转换为对象数据。所以,可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。

JAVA中,流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。

      Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示:InputStreamOutputStreamReaderWriterJava中其他多种多样变化的流均是由它们派生出来的。

 

流的分类:

1.     字节流

2.     过滤流

3.     数据类型流

4.     对象流

 

InputStream

常用方法:

 int

available()
          
返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。

 void

close()
          
关闭此文件输入流并释放与此流有关的所有系统资源。

int

read()
          
从输入流中读取数据的下一个字节。

 int

read(byte[] b)
          
从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

FileInputStream类:

构造方法:

FileInputStream(File file)
          
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。

FileInputStream(FileDescriptor fdObj)
          
通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。

FileInputStream(String name)
          
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。

 

常用方法和InputStream差不多。

 

OutputStream

常用方法:

方法摘要

 void

close()
          
关闭此输出流并释放与此流有关的所有系统资源。

 void

flush()
          
刷新此输出流并强制写出所有缓冲的输出字节。

 void

write(byte[] b)
          
b.length 个字节从指定的 byte 数组写入此输出流。

 void

write(byte[] b, int off, int len)
          
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

abstract  void

write(int b)
          
将指定的字节写入此输出流。

 

FileOutputStream类:

构造方法摘要

FileOutputStream(File file)
          
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

 

FileOutputStream(File file, boolean append)
          
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

 

FileOutputStream(FileDescriptor fdObj)
          
创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。

 

FileOutputStream(String name)
          
创建一个向具有指定名称的文件中写入数据的输出文件流。

 

FileOutputStream(String name, boolean append)
          
创建一个向具有指定 name 的文件中写入数据的输出文件流。

 

 

方法摘要

 void

close()
          
关闭此文件输出流并释放与此流有关的所有系统资源。

protected  void

finalize()
          
清理到文件的连接,并确保在不再引用此文件输出流时调用此流的 close 方法。

 FileChannel

getChannel()
          
返回与此文件输出流有关的唯一 FileChannel 对象。

 FileDescriptor

getFD()
          
返回与此流有关的文件描述符。

 void

write(byte[] b)
          
b.length 个字节从指定 byte 数组写入此文件输出流中。

 void

write(byte[] b, int off, int len)
          
将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。

 void

write(int b)
          
将指定字节写入此文件输出流。

 

缓冲流:

功能:提高读写效率

构造方法摘要

BufferedInputStream(InputStream in)
          
创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

 

BufferedInputStream(InputStream in, int size)
          
创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

 

BufferedOutputStream(OutputStream out)
          
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。

BufferedOutputStream(OutputStream out, int size)
          
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流。

:对于BufferedOutputStream要么用flush()方法强制想缓冲区的数据读出来,要么要及时close(),否则数据留在缓冲区,会导致数据没有读到输出文件中。

综合实例:

package lesson12;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

 

public class FileIO {

       /**定义一个类,实现文件复制功能

        * @param args

        */

       public static void main(String[] args) {

              //注意两个路径的文件的后缀名一定要相同,否则可以复制,但打开会有乱码

              String inputFile = "D:/soft/jdk1.6.CHM";

              String outputFile = "D:\\Java\\src\\lesson12\\输出文件.CHM";

                     FileIO file = new FileIO();

                     file.copy(inputFile,outputFile);

       }

       //方法

       public  void copy(String InputFile,String OutputFile) {

                     try {

                            //定义输入流

                            InputStream ips = new FileInputStream(InputFile);

                            //定义缓冲输入流

                            BufferedInputStream bis = new BufferedInputStream(ips);

                            //计算输入文件的长度

                            int len = ips.available();

                            //定义一个字节数组,长度为文件大小

                            byte[] array = new byte[len];

                            //读取数据

                            ips.read(array);

                            //定义文件输出流

                            OutputStream ops= new FileOutputStream(OutputFile);

                            //定义缓冲流

                            BufferedOutputStream bos = new BufferedOutputStream(ops);

                            //将数组的内容输出到指定文件里

                            bos.write(array);

                            //一定要记得关闭流

                            bos.flush();

                            ops.close();

                            ips.close();

                            bos.close();

                            bis.close();

                            System.out.println("文件输出成功!!");

                     } catch (FileNotFoundException e) {

                            e.printStackTrace();

                     } catch (IOException e) {

                            e.printStackTrace();

                     }

       }

}

  

 

1
2
分享到:
评论

相关推荐

    java中的IO操作总结(四)

    java中的IO操作总结(四) 前面已经把java io的主要操作讲完了 这一节我们来说说关于java io的其他内容 Serializable序列化 实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23...

    IO文件流总结

    字节流、文件流、文件操作、字节流文件流相互转换,流的包装

    java 复制文件 io流操作

    完整的文件io 流操作,有四个函数, Writer read inputStream outputStream自己总结的东东,让大家用用,不图得分,

    磁盘IO的总结

    每个文件描述符对应内核中一个叫file的对象...文件的读写操作最终由inode对象完成。所以,如果读写线程打开同一个文件的话,即使采用 各自独占的文件描述符,但最终都会作用到同一个inode对象上。因此不会提升IO性能。

    java中的IO操作总结(一)

    java中的IO操作总结(一) 所谓IO,也就是Input与Output的缩写。在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写 其他知识点将放置后续章节(我想,文章太长了,谁都没耐心翻到最后) 对于文件内容...

    关于C#IO问题

    这是一篇关于C#IO文件操作的代码总结,有兴趣的可以看一下

    java IO 文件操作方法总结

    主要介绍了java IO 文件操作方法总结的相关资料,需要的朋友可以参考下

    Java之IO流学习总结

    Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据...

    C#之IO常见操作汇总

    文件操作是程序中非常基础和重要的内容,而路径、文件、目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供给...

    javaio文件操作工具类,集成小部分对目录操作的方法

    javaio文件操作工具类,集成小部分对目录操作的方法,平时工作中学习中总结的部分方法方便大家使用~不妥之处望大家指教谢谢~!

    java IO流总结.md

    java I/O流的总结 1.操作数据单位:字节流、字符流 对于文本文件(.txt,.java,.c,.cpp),使用字符流处理 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc,.ppt,...),使用字节流处理 2.数据的流向:输入流、输出流 ...

    java IO章节的总结

    以上能够直接对数据进行读和写的流叫节点流,但是直接用这些来操作是比较麻烦的,而且一个字节一个字节的对文件处理,对硬盘的读取和存入对硬盘的损伤是很大的,因此需要对这些节点流进行包装,即外套一些处理流来...

    JavaSE专题-IO流重点总结(必读).doc

    注意:File类封装的路径,而不一定是一个具体的文件,File类不能用于读写文件,File类只能用来处理和文件相关的操作 构造方法 * File(String pathname):根据一个路径得到File对象 * File(String parent, String child)...

    Java-IO流/Stream流总结

    Java-IO流/Stream流总结,内容一针见血,没有废话,言简意赅 ...适用场景:Java中的流是随处可见的,涉及文件的操作必须使用IO流,Stream流可以对一些集合进行简便的操作,代码十分优雅,开发中非常常见。

    Python常见读写文件操作实例总结【文本、json、csv、pdf等】

    本文实例讲述了Python常见读写文件操作。分享给大家供大家参考,具体如下: 读写文件 读写文件是最常见的IO操作,python内置了读写文件的函数,用法和c是兼容的. 读写文件前,我们必须了解一下,在磁盘上读写文件的功能...

    Java IO 体系.md

    - BIO 和 NIO 拷贝文件的区别 - 操作系统的零拷贝 - 选择器(Selectors) - 选择键(SelectionKey) - 示例:简易的客户端服务器通信 - 总结 Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括...

    22.Twisted使用总结.zip

    文件IO操作 文件读写基本操作 CSV和Excel文件的处理 文本文件编码和解码 数据存储与持久化 数据库的使用和操作(如MySQL、MongoDB等) 数据存储格式的选择和优化 实际案例分析 应用所学知识解决真实世界中的爬虫...

    苏大操作系统本科期末题库.rar

    题库中包括了单选题、多选题、填空题、简答题和程序设计题等多种类型,涵盖了操作系统的基础概念、进程管理、内存管理、文件系统、IO设备管理等多个方面。 关键信息: 文件格式:RAR 文件大小:约20MB 题目数量:近...

    zhidd#ZXBlog#4_内存管理、设备管理、IO、文件系统1

    ## 操作系统总结 - 内存管理、设备管理(IO)、文件系统(四)* 内存的基础知识* 内存管理的概念* 覆盖与交换* 连续分配管理方式内存的基础知识本节知识总

    io0007-find_progess-0.0.8.6-SNAPSHOT.jar

    这是我工作5年依赖不断总结和优化的常用工具类,包括文件操作,发送http请求,swing图形界面常用组件,排列组合等

Global site tag (gtag.js) - Google Analytics