Java-IO

Java-IO (Input Output)

IO流用来处理设备之间的数据传输。

Java.io 包:包含了所有操作输入、输出需要的类。

按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同可以分为输入流和输出流,

程序从输入流中读取数据,向输出流中写入数据。

字节流的输入输出流分别为:InputStream 和 OutputStream

字符流的输入输出流分别为:Reader 和 Writer

字节流:字节流可以操作任何数据 字符流:字符流只能操作纯字符数据

img

图片来自:http://www.runoob.com/java/java-files-io.html

1.File

文件和目录路径名的抽象表现形式。

常用方法:

方法名 描述
exists() 测试文件或目录是否存在
createNewFile() 创建指定文件放回true,若存在则不创建返回false
mkdir() 创建文件夹,若存在则不创建
mkdirs() 创建文件夹,如果父文件夹不存在,则创建(创建多级目录)
delete() 删除文件或文件夹,当删除文件夹时,若文件夹中有内容,则不能删除
renameTo(File dest) 把文件重命名为指定文件路径,(用于重命名文件或移动文件)
isDirectory() 判断是否是目录
isFile() 判断你是否是文件
getAbsolutePath() 获取绝对路径
getPath() 获取相对路径
getName() 获取名称
length() 返回文件的长度,字节数,如果是文件夹则返回0
list() 返回指定目录下所有文件或文件夹名称的字符串数组
listFiles() 返回指定目录小所有文件或者文件夹的File数组
lastModified() 获取最后一次的修改时间,单位毫秒

2.FileInputStream

用来从文件中读取数据

			FileInputStream fos=new FileInputStream("test.txt");
		 	//InputStreamReader 转换流 ,用于字节流转换为字符流
			BufferedReader br=new BufferedReader(new InputStreamReader(fos));
			String line; //一行行的读取数据
			while((line=br.readLine())!=null) {
				System.out.println(line);
			}
			br.close();// 关闭数据流
			fos.close();

3.FileOutputStream

用来向文件中写入数据

			FileOutputStream fos=new FileOutputStream("test1.txt",true);
			String string="test1";
			fos.write(string.getBytes());
			fos.close();

4.文件拷贝

		FileInputStream fis=new FileInputStream("image.jpg");
		FileOutputStream fos=new FileOutputStream("imagecopy.jpg");
		int len=0;  //读取到有效字节个数 ,当没有数据时放回-1
		byte[] buffer=new byte[1024*8];//定义缓冲区大小
		while((len=fis.read(buffer))!=-1) { 
			fos.write(buffer,0,buffer.length);
		}
		//关闭数据流
		fis.close();
		fos.close();

5.Java 1.7新特性 自动关闭资源的try语句

语法:

try (  /* 需要自动关闭的资源*/   ){
            
        }

示例:

 //文件拷贝
try (InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target)){
 
        byte[] buf = new byte[8192];
        int i;
        while ((i = fis.read(buf)) != -1) {
            fos.write(buf, 0, i);
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }

注意:被关闭的对象需要实现 java.lang.AutoCloseable 接口

6. 对象序列化 ObjectOutputStream和ObjectInputStream

对象需要实现 Serializable 接口

public class Person implements Serializable {

    public Person(int id, String name) {
        Id = id;
        Name = name;
    }

    public int Id;
    public String Name;
}
   public static void writeObject(List<Person> list){

        try (ObjectOutputStream objectOutputStream =new ObjectOutputStream(new FileOutputStream("data.dat"))){
            objectOutputStream.writeObject(list);

        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(" Successfully.");
    }

    public  static List<Person> readObject(){

        try (ObjectInputStream objectInputStream=new ObjectInputStream(new FileInputStream("data.dat"))){
            return  (List<Person>)objectInputStream.readObject();

        } catch (Exception e) {
            e.printStackTrace();
        }
          return null;
    }

7. InputStreamReader 和OutputStreamWriter

他们起到作用是连接字节流和字符流。

posted @ 2017-09-05 17:02  -Tiger  阅读(347)  评论(0编辑  收藏  举报