Java实现对文件的读写操作

实现对文件进行读写

    • 使用PrintWriter对文件进行写操作
    • 使用Scanner对文件进行读操作
    • 使用缓冲设计对文件进行读写操作

使用PrintWriter对文件进行写操作

java.io.PrintWriter类可用来创建一个文件并向文件中写入数据,首先必须先为文件创建一个PrintWriter对象。

File file = new File("text.java");
PrintWriter put = new PrintWriter(file);

调用Printwriter的构造方法,如果文件不存在,则会在当前目录下创建一个新文件。如果文件已经存在,那么文件中的当前内容将在不与用户确认的情况下被格式化。
注:

  • 在Windows系统中目录的分割符为反斜杠(\),但是在程序语言中反斜杠是一个特殊字符(转义字符),因此在程序中应写成\\的形式。此外,也可使用斜杠(/),这样在Windows、UNIX或其他任何系统上都能够工作
  • 在程序中,尽量不要直接使用绝对文件名。如果使用了像(“D:\\Users\\lenovo\\eclipse-workspace\\demo\\text.java”)
    之类的文件名,那么它能在Windows上工作,但是不能在其他平台上工作,导致兼容性差。推荐使用相对文件名,例如,可以使用new File(“text.java”)为当前目录下的文件text.java创建一个File对象。

此处提到的相对文件名和绝对文件名区别如下:

  • 绝对文件名(absolute file name)是由文件名和它的完整路径以及驱动器字母组成。例如,C:\book\Welcome.java是文件Welcome.java在Windows操作系统上的绝对文件名。
  • 相对文件名是相对于当前工作目录的。对于相对文件名而言,完整目录被忽略。例如Welcome.java是一个相对文件名。如果当前工作目录是C:\book,绝对文件名将是C:\book\Welcome.java 。

代码如下:

import java.io.*; 
import java.util.Scanner;
public class TestFile {

	public static void main(String[] args) throws IOException{
		// TODO 自动生成的方法存根
		Scanner in = new Scanner(System.in);
		File file = new File("text.java");//相对文件名
		if(file.exists()) {
			System.out.println("File already exists!");
			//System.exit(1);//如果存在,(正常)退出该程序
		}
		PrintWriter put = new PrintWriter(file);
		while(!in.hasNext("END")) {
        	/*
        	 * 执行hasNext()时,它会先扫描缓冲区中是否有字符,有则返回true,
        	 * 继续扫描。直到扫描为空,这时并不返回false,
        	 * 而是将方法阻塞,等待你输入内容然后继续扫描
        	 * 因此此处不建议使用while(in.hasNext())
        	 */
        	String str = in.nextLine();
        	put.println("Good morning!"); //写入内容的同时换行
    		put.println(str);
		}
		/*PrintWriter put = new PrintWriter(file);
		若文件存在则直接写入(文件内容将在不与用户确认的情况下被丢弃)
		若文件不存在则在当前目录下(eclipse-workspace\demo)创建新文件(text.java)*/
    	in.close();
		put.close();
		System.out.println("文件绝对路径名:"+file.getAbsolutePath());
	}
}

Java实现对文件的读写操作_第1张图片
Java实现对文件的读写操作_第2张图片
调用PrintWriter的构造方法时可能会抛出一个I/O异常,Java强制要求编写代码来处理这类异常(即使用try{}catch{}来检测处理异常),但此处为简单起见只需在方法头声明throws IOException。

使用Scanner对文件进行读操作

Java.util.Scanner类用于从控制台读取字符串和基本类型值。为了从文件中读取内容,需为文件创建一个Scanner,如下:

File file = new File("text.java");
Scanner input = new Scanner(file);

完整代码如下:

//读文件:
		File file = new File("text.java");//相对文件名
		Scanner input = new Scanner(file);
		while(input.hasNext()) {
			String s = input.nextLine();
			System.out.println(s);
		}
		input.close();

结果如下:
Java实现对文件的读写操作_第3张图片

使用缓冲设计对文件进行读写操作

完整代码如下:

import java.io.*; 
import java.util.Scanner;

public class Mod8_Mod9 {  
    public static void main(String args[]) {  
        try {   
        	Scanner in = new Scanner(System.in);
            File file = new File("text.txt");
            BufferedWriter out = new BufferedWriter(new FileWriter(file));
            //FileWriter()向文件写入数据
            //out为字符缓冲输出流对象
            System.out.println("输入内容:");
            while(!in.hasNext("END")) {
            	/*
            	 * 执行hasNext()时,它会先扫描缓冲区中是否有字符,有则返回true,
            	 * 继续扫描。直到扫描为空,这时并不返回false,
            	 * 而是将方法阻塞,等待你输入内容然后继续扫描。
            	 */
            	String str = in.nextLine();
            	//String str1 = str+"\r\n";
            	out.write(str);
            	out.newLine();//换行
            	//out.flush();
            }	//刷新缓冲流
            	// 手动把缓存区内容压入文件,否则直接调用.close()后会造成缓冲区未填满的数据丢失
            in.close();
            out.close(); //关闭输入流释放内存,同时释放文件 
        } 
        catch (Exception e) {  
            e.printStackTrace();  
        }
        System.out.println("文件内容为:");
        try{
			File file = new File("text.txt");
			FileInputStream fis = new FileInputStream(file);
			//实例化FileInputStream()对象,并直接传入已打开文件的File对象
			InputStreamReader is = new InputStreamReader(fis);
			//InputStreamReader用于将字节流中的字节码解码成字符
			BufferedReader br = new BufferedReader(is);
			//BufferedReader类从字符输入流中读取文本并缓冲字符
			//以便有效地读取字符、数组和行
			String txtLine = null;		
			while((txtLine=br.readLine())!=null){	//按行读取字符串
				System.out.println(txtLine);	
			}
			br.close();
			System.out.println("路径:"+file.getAbsolutePath());
		}
       catch (FileNotFoundException e1) {	//异常处理
	         System.err.println("File not found!");
		}
        catch(Exception e2){
			e2.printStackTrace();
		}
    }  
}  

运行截图:
Java实现对文件的读写操作_第4张图片

你可能感兴趣的:(Java,java)