文本I/O

目录

一、File类

二、文件的输入输出

1.使用PrintWrite写数据 

1.创建一个PrintWrite对象

2.了解PrintWrite中的常用方法

3.为什么要关闭文件

4.使用try-with-resources自动关闭资源

2.使用Scanner读取数据

3.学以致用:设计一个替换文本的小程序

 三、小小总结

1.为什么要异常处理


一、File类

1、File类包含了获得文件/目录的属性,以及对文件/目录进行改名和删除的方法。

2、在文件系统中,每一个文件都存放在一个目录下;

绝对文件名(或者完整路径):包含文件名及其完整路径和驱动器字母;

相对文件名:是相对当前工作目录的。

3.File对象的创建(介绍了三种方法)

  //创建一个文件的对象 
   File ff1 = new File("文件的地址");       
   
   //绝对路径
  System.out.println("ff1的绝对路径:" + ff1.getAbsolutePath());      
    
  // 相对路径      
   File ff2 = new File("happy.exe");        
   System.out.println("ff2的绝对路径:" + ff2.getAbsolutePath());      
     
  // 把ff1作为父目录创建文件对象       
  File ff3 = new File(ff1, "LOL.exe");         
  System.out.println("ff3的绝对路径:" + ff3.getAbsolutePath());
 

4.了解File类

File类包含许多获取文件属性的方法,以及重命名、删除文件和目录的方法,但是不包括读写文件内容的方法。

1 、文件是否存在
System.out.println(“判断是否存在:”+f.exists());

2 、判断是否是一个目录(文件夹)
System.out.println(“判断是否是文件夹:”+f.isDirectory());

3、判断是否是文件
System.out.println(“判断是否是文件:”+f.isFile());

4 、判断文件的长度
System.out.println(“获取文件的长度:”+f.length());

5、 //文件最后修改的时间
long time = f.lastModified();
Date date = new Date(time);
System.out.println(“获取文件最后的修改时间:”+date);

6、文件的重命名
File ff = new File(“ /home/szlaurora/1.java”);
f.renameTo(ff);
System.out.println();

7、以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹
f.list();

8 、以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
File[ ]  f = f.listFiles();

9、以字符串形式返回获取所在文件夹
f.getParent();

10、以文件形式返回获取所在文件夹
f.getParentFile();

11、创建文件夹,如果父文件夹 不存在,创建就无效
f.mkdir();

12 、创建文件夹,如果父文件夹 不存在,就会创建父文件夹
f.mkdirs();

13 、创建一个空文件,如果父文件夹 不存在,就会抛出异常
f.createNewFile();

14、删除文件
f.delete();

15、JVM结束的时候,刪除文件,常用于临时文件的删除
f.deleteOnExit();`
 

二、文件的输入输出

使用Scanner类从文件中读取文本数据,使用PrintWrite类向文本文件写入数据。

1.使用PrintWrite写数据 

1.创建一个PrintWrite对象

PrintWrite output = new PrintWirter(filename);

2.了解PrintWrite中的常用方法

1.print(String str):向文件写入一个字符串。

2 print(char[] ch):向文件写入一个字符数组。

3 print(char c):向文件写入一个字符。

4 print(int i):向文件写入一个int型值。

5 print(long l):向文件写入一个long型值。

6 print(float f):向文件写入一个float型值。

7 print(double d):向文件写入一个double型值。

8 print(boolean b):向文件写入一个boolean型值。

通过一个小程序了解PrintWrite中的方法

public class WriteData {
    public static void main(String[] args)  throws java.io.IOException{  //因为使用PrintWriter的构造方法可能会抛出一个I/O异常
        java.io.File file = new java.io.File("/home/szlaurora/luck.txt");
        //检测文件是否存在
        if(file.exists()){
            System.out.println("File already exists");
            System.exit(1);
        }
        //如果文件不存在呢,那就调用PrintWriter的构造方法创建一个新文件
        java.io.PrintWriter output = new java.io.PrintWriter(file);

        output.print("Jone T Smith ");
        output.println(90);
        output.print("Eric K Jones");
        output.println(85);

        output.close();//关闭文件
    }
}

3.为什么要关闭文件

当程序向文件中写入数据的时候,首先将数据临时存储在内存的一个缓存中。当缓存已经满了的时候,数据自动保存到磁盘文件中。一旦文件关闭了,缓存中的所有数据将保存到磁盘文件中。

所以呐(=@__@=) 

必须关闭文件用来保证所有的数据都保存到了文件中。

4.使用try-with-resources自动关闭资源

使用格式:

try {
	//code statements(正常代码语句)
	//exception thrown here(抛出异常的语句)
	//lines not reached if exception thrown(异常抛出后无法执行的代码部分)
} catch (Exception e) {
	//lines reached only when exception is thrown(抛出异常后才会执行的代码部分)
} finally {
	//always executed irrespective of an exception thrown or not
	//(无论是否抛出异常都会执行的代码部分)
}

2.使用Scanner读取数据

java.util.Scanner类用来从控制台读取字符串和基本类型值。

1.为了从键盘中读取,需要为System.in创建一个Scanner,

eg:

Scanner input = new Scanner(System.in);

2.为了从文件中读取,需要为文件创建一个Scanner;

eg:

Scanner input = new Scanner(new File(filename));

3.学以致用:设计一个替换文本的小程序

import java.io.*;
import java.util.*;
public class ReplaceText {
    public static void main(String[] args) throws Exception{
        if(args.length !=4){
            System.out.println("Usage: java ReplaceText sourceFile targetFile oldStr newStr");
            System.exit(1);
        }

        File sourceFile = new File(args[0]);
        if(!sourceFile.exists()){
            System.out.println("Source file " + args[0] + "does not exist");
            System.exit(2);
        }

        File targetFile = new File(args[1]);
        if(targetFile.exists()){
            System.out.println("Target file " + args[1] + "already exists");
            System.exit(3);
        }

        try(
            Scanner input = new Scanner(sourceFile); //为源文件创建一个Scanner
            PrintWriter output = new PrintWriter(targetFile);//为目标文件创建一个PrintWriter
        ){
            while (input.hasNext()){
                String s1 = input.nextLine();
                String s2 =s1.replaceAll(args[2],args[3]);//替换
                output.println(s2);
            }
        }

    }
}

 三、小小总结

1.为什么要异常处理

1.异常处理使得方法能够抛出异常给它得调用者;

2.异常产生在一个方法的执行过程中,RuntimeException和Error都是免检异常,所有的其他异常都是必检的;

3.当声明一个方法的时候,如果这个方法可能抛出一个必检异常,那么必须进行声明,这样才能告诉编译器可能出现什么错误。

4.声明异常的关键字是:throws,抛出异常的关键字是:throw;

5.调用了声明必检异常的方法,需要将该方法调用放在try语句中,在方法执行的过程中如果出现异常,catch块会捕获异常并且处理掉;

6.可以从一个共同的父类派生出各种不同的异常类。如果一个catch块捕获到父类的异常对象,它也能捕获这个父类的所有异常对象,会导致一个编辑错误;

7.任何情况下都会执行finally块中的代码;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值