Java IO主要可分为两部分,一部分是对文件本身的操作,一部分是对文件内容的操作。

一、对文件本身操作

      该部分所对应的主要类是File,主要操作如下:

package com.ass;

import java.io.File;
import java.io.IOException;

public class FileTest {
	public static void main(String[] args) throws IOException {
		File file = new File("E://test.txt");
		System.out.println("文件是否可执行:" + file.canExecute());
		System.out.println("文件是否可读取:" + file.canRead());
		System.out.println("文件是否可写入:" + file.canWrite());
		System.out.println("文件是否可存在:" + file.exists());
		System.out.println("获取文件真是路径:" + file.getAbsolutePath());
		System.out.println("获取文件父路径:" + file.getParent());
		System.out.println("判断是否是文件夹:" + file.isDirectory());
		System.out.println("设置文件为只读权限:" + file.setReadOnly());
		System.out.println("设置文件读权限:" + file.setReadable(true));
		System.out.println("设置文件写读权限:" + file.setWritable(true));
		System.out.println("设置文件可执行权限:" + file.setExecutable(true));
	}
}

其他操作可查看jdk文档

二、对文件内容进行操作

      (一)、通过字节流操作文件内容

        该操作主要由抽象类java.io.InputStream及其子类,抽象类java.io.OutputStream及其子类进行。

        1、输入流

        InputStream(输入流-抽象类)->FileInputStream(文件输入流)

                                                     ->BufferedInputStream(缓存输入流-效率高)

        主要由以上三个类组成,基本操作如下:

package com.ass.io;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class FileInputOpt {

	public static void main(String[] args) throws IOException {

		// 使用InputStream
		// InputStream i=System.in;
		// int tempStr1=0;
		// while ((tempStr1=i.read()) != -1) {
		// System.out.print((char)tempStr1);
		// }
		// i.close();

		// 使用FileInputStream
		File file = new File("E://test.txt");
		FileInputStream in = new FileInputStream(file);
		int tempStr2 = 0;
		System.out.println("FileInputStream s");
		while ((tempStr2 = in.read()) != -1) {
			System.out.print((char) tempStr2);
		}
		in.close();
		System.out.println();
		System.out.println("FileInputStream e");

		BufferedInputStream bu = new BufferedInputStream(new FileInputStream(file));
		int tempStr3 = 0;
		System.out.println("BufferedInputStream s");
		while ((tempStr3 = bu.read()) != -1) {
			System.out.print((char) tempStr3);
		}
		bu.close();
		System.out.println();
		System.out.println("BufferedInputStream e");

	}

}

2、输出流

     OutputStream(输出流-抽象类)->FileOutputStream(文件输出流)

                                                    ->BufferedOutputStream(缓存输出流-效率高)

     主要由以上三个类组成,基本操作如下:

package com.ass.io;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FileOutputOpt {

	public static void main(String args[]) throws IOException {

		
		OutputStream out=null;
//		out=new FileOutputStream(new File("E://test.txt"));  // 使用FileOutputStream
		out=new BufferedOutputStream(new FileOutputStream(new File("E://test.txt")));  //使用BufferedOutputStream
		out.write("test".getBytes());
		out.write("\r\n".getBytes());
		out.write("test1".getBytes());
	}

}

(二)、通过字符流对文件内容进行操作

      (1)、输入流

                 Reader(字符流-抽象类)->FileReader(文件字符流)

                                                      ->BufferedReader(缓存字符流)

                                                      ->LineNumberReader(缓存字符流->可获取行号)

              主要由以上4个类构成,具体操作如下:

package com.ass.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class FileInputCharOpt {

	public static void main(String args[]) {

		// 使用FileReader
		try {
			FileReader fileReader = new FileReader(new File("E://test.txt"));
			int read;
			System.out.println("FileReader s:");
			while ((read = fileReader.read()) != -1) {
				System.out.print((char) read);
			}
			System.out.println();
			System.out.println("FileReader e:");
			fileReader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 使用BufferedReader
		try {
			BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("E://test.txt")));
			System.out.println("BufferedReader s:");
			String strTemp = "";
			while ((strTemp = bufferedReader.readLine()) != null) {
				System.out.println(strTemp);
			}
			System.out.println("BufferedReader e:");
			bufferedReader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 使用LineNumberReader,有获取行号的方法
		try {
			LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(new File("E://test.txt")));
			System.out.println("LineNumberReader s:");
			String strTemp = "";
			while ((strTemp = lineNumberReader.readLine()) != null) {
				System.out.println("内容:" + strTemp);
				System.out.println("行号:" + lineNumberReader.getLineNumber());
			}
			System.out.println("LineNumberReader e:");
			lineNumberReader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 使用读取器InputStreamReader,可将输入流转换为读取器(注:目前没有遇到在哪可以用这种情况)
		try {
			LineNumberReader lineNumberReader = new LineNumberReader(new InputStreamReader(System.in));
			System.out.println("LineNumberReader s:");
			String strTemp = "";
			while ((strTemp = lineNumberReader.readLine()) != null) {
				System.out.println("内容:" + strTemp);
				System.out.println("行号:" + lineNumberReader.getLineNumber());
			}
			System.out.println("LineNumberReader e:");
			lineNumberReader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}

(2)、输出流

             Writer(字符流-抽象类)->FileWriter(文件字符流流)

                                               ->BufferedWriter(缓存字符流)              

           主要由以上两个类构成,具体操作如下:

package com.ass.io;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class FileOutputCharOpt {

	public static void main(String[] args) {
		// 使用FileWriter操作文件
		try {
			FileWriter fileWriter = new FileWriter(new File("E://test.txt"));
			fileWriter.write("test");
			fileWriter.write("\r\n");
			fileWriter.write("test1");
			fileWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// 使用BufferedWriter操作文件
		try {
			BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File("E://test.txt")));
			bufferedWriter.write("test");
			bufferedWriter.newLine();
			bufferedWriter.write("test1");
			bufferedWriter.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

(三)、随机访问文件(RandomAccessFile)

           该类可以对进行随机的读写操作,操作方法可查看API文档,注意其构造方法传参:

           **构造方法中mode传r代表读,rw代表写,具体可看源码**

  (四)、标准输出:

            PrintStream(处理字节强)

            PrintWirter(处理字符强)

           具体操作方法可查看API文档,这儿就不一一介绍。

后记:主要为了方便以后使用,本文如果有不正确之处请多多指教。