`
aijuans
  • 浏览: 1564893 次
社区版块
存档分类
最新评论

Oracle培训(十四)——Core Java第十四章知识点总结——文件与I/O流

阅读更多

Core Java第十四章知识点总结——文件与I/O流


知识点预览


File类的使用

IO的分类

字节流

字符流

对象序列化


File类

 

1.   java.io.File类

代表硬盘上的一个文件或者文件夹

文件、文件夹

代表:只是开辟内存空间,有File对象不一定有对应的文件或者文件夹


2.  java中文件路径的表示形式

a) windows中表示 c:\suns.txt

b) java中表示 c:\\suns.txt c:/sun.txt


3.  File类的构造方法

构造方法 File类没有无参构造方法

File(String pathname)

File(String parent,Stirngchild)

//parent:父目录

//child:

File(File parent,String child)


4. File类的常用方法

a)        createNewFile() 创建文件,文件不存在才创建

b)       mkdir/mkdirs() 创建目录 mkdir创建一级目录 mkdirs 创建多级目录

c)        delete() 执行完后立即删除

d)       deleteOnExit() 当程序退出时才删除

e)        exists() 当前文件或者目录是否存在 返回值 boolean

f)        isFile() 返回值 boolean

g)       isDirectory返回值 boolean

h)       getPath() 文件路径

i)         getName() 文件名

j)         getParent() 父目录

k)       getAbsolutePath() 绝对路径

l)         list() 1级目录才可调用(子目录、文件)子目录有子目录,不能获得

 

I/O

 

1.I/O流概念

Input/Output针对于JVM内存


2. 流的概念

用来传输数据的对象 生活中比如电线、水管


3.  I/O流的分类

按流向(针对Java虚拟机)输入流输出流

按数据单位 字节流(可传输任意文件)字符流(处理文本文件)

按功能 节点流(真正完成传输)过滤流(用于增加节点流的功能)


字节流

1.字节流的概念

传输的数据单位是字节,也意味着字节流能够处理任何一种文件


2. 字节流的组成

InputStream OutputStream (所有字节流的父类 抽象类不能创建对象)


 


 

3.FileInputStream字节输入流

a) FileInputStream构造方法

                       i.             FileInputStream(String filename)

                     ii.             FileInputStream(File file)

b)read方法

                       i.             int read();//读取字节

                     ii.             int read(byte[] bs);//读取后填充数组 返回实际读取数

                   iii.             int read(byte[] bs,int off,intlen);

 

package chp14.ex02;

import java.io.FileInputStream;
import java.io.InputStream;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestInputStream.java
 * @Description: FileInputStream 去读内容
 * @Create Date: 2012-8-18
 */
public class TestInputStream {
  public static void main(String args[])throws Exception{
	  InputStream is = new FileInputStream("oracle.txt");
	  int len = 0;
	  while((len=is.read())!=-1){
		  char c = (char)len;
		  System.out.println(c);
	  }
  }
}

package chp14.ex03;

import java.io.FileInputStream;
import java.io.InputStream;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestInputStream.java
 * @Description: FileInputStream read byte数组
 * @Create Date: 2012-8-18
 */
public class TestInputStream{
	public static void main(String args[]) throws Exception{
		InputStream fin = new FileInputStream("oracle.txt");
		byte[] bs = new byte[6];
		int len = 0;
		while( (len=fin.read(bs))!=-1){
			//注意使用读取的实际长度
			for(int i = 0; i< len; i++){
				System.out.print((char)bs[i]);
			}
			System.out.println();
		}
		fin.close();
	}
}


 

c) close()//关闭资源

d)   小技巧

同步执行的代码------->放入while循环中





4.FileOutputStream 字节输出流(JVM------->文件)

a)  FileOutputStream构造方法

                       i.             FileOutputStream(String path);

                     ii.             FileOutputStream(File file);

b)  write方法

                       i.             void write(int v);//输出一个字节

                     ii.             void write(byte[] bs);//输出byte数组内容

                   iii.             int write (byte[] bs,intoff,int len);//输出部分

c)  close方法

d) 追加方式

                       i.             FileOutputStream(Stringpath,boolean append);

                     ii.             FileOutputStream(Filefile,boolean append);

 

package chp14.ex05;
import java.io.*;
/**
 * 
 * @Author: Wentasy
 * @FullName: TestOutputStream.java
 * @Description: FileOutputStream 追加写入内容
 * @Create Date: 2012-8-18
 */
public class TestOutputStream{
	public static void main(String args[]) throws Exception{
		String hello = "Hello World";
		byte[] bs = hello.getBytes();
		FileOutputStream fout= 
				new FileOutputStream("test.txt",true);
		fout.write(bs);
		fout.close();
	}
}


                   iii.             append:为true表示追加 为false 更新后创建

5.  异常处理

try…catch…finally

finally:书写关闭资源的代码

 

package chp14.ex06;

import java.io.*;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestInputStream.java
 * @Description: 文件读写的异常处理
 * @Create Date: 2012-8-18
 */
public class TestInputStream {
	public static void main(String args[]) {
		FileInputStream fin = null;
		try {
			fin = new FileInputStream("abc.txt");
			byte[] bs = new byte[6];
			int len = 0;
			while ((len = fin.read(bs)) != -1) {
				for (int i = 0; i < len; i++) {
					System.out.print((char) bs[i]);
				}
				System.out.println();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			//判断是否为空
			if (fin != null){
				try {
					fin.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}	
		}
	}
}

6. 过滤流

a)  Data Stream

DataInputStream

       readXXX();

DataOutputStream

writeXXX();

对八种基本数据类型和String的支持

 

package chp14.ex07;

import java.io.*;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestDataStream.java
 * @Description: DataStream过滤流的使用
 * @Create Date: 2012-8-18
 */
public class TestDataStream{
	public static void main(String args[]) throws Exception{
		
		//创建节点流
		FileOutputStream fout = new FileOutputStream("pi.dat");
		//封装过滤流
		DataOutputStream dout = new DataOutputStream(fout);
		//写数据
		dout.writeDouble(3.14);
		//关闭外层流
		dout.close();

		//创建节点流
		FileInputStream fin= new FileInputStream ("pi.dat");
		//封装过滤流
		DataInputStream din = new DataInputStream(fin);
		//读数据
		double pi = din.readDouble();
		//关闭外层流
		din.close();
		
		System.out.println(pi);
	}
}


 

b) 过滤流的开发步骤

                       i.             创建节点流

                     ii.             基于节点流创建过滤流

                   iii.             读/写数据

                    iv.             关闭外层流(过滤流)

             过滤流不能连接JVM和数据源 真正起作用的还是节点流

c)  Buffered Stream

BufferedInputStream

BufferedOutputStream

增加了缓冲区功能------->提高程序执行效率

注释bout.close();//不会写任何内容到文件

bout.flush();//让缓冲区的内容同步到外部文件中

 

package chp14.ex08;
import java.io.*;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestBufferedStream.java
 * @Description: BufferedStream 过滤流的使用
 * @Create Date: 2012-8-18
 */
public class TestBufferedStream{
	public static void main(String args[]) throws Exception{
		String data = "Hello World";
		byte[] bs = data.getBytes();
		//创建节点流
		FileOutputStream fout = new FileOutputStream("test.txt");
		//封装过滤流
		BufferedOutputStream bout = new BufferedOutputStream(fout);
		//写数据
		bout.write(bs);
		//关闭外层流
		bout.close(); 
		//一定要关闭或者flush
		//bout.flush();
	}
}

 

d)Object Stream

ObjectInputStream

ObjectOutputStream

ObjectStream特点:

增加了缓冲区功能

增强了8种基本数据类型的处理

增强了读写对象的功能

writeObject();

readObject();

 

对象序列化详见最后一节 对象序列化


字符流


1.   字符编码

字符或者文字转换成数字,即称为编码

数字转换成字符或者文字,即称为解码

2.常见的编码规范

a)        ASCII:英文、英文标点

b)       ISO-8859-1:西欧文字、标点 如德文、法文

c)        GBK:大陆

d)       UTF-8:国际通用

e)        补充:big5:大五码 繁体字台湾使用

3.  乱码问题

a)   编码方式不一致 导致乱码

b)  任意一种编码都兼容ASCII,所以英文不可能出现乱码

4. 字符流的组成

Reader


Writer

 

 


5.  FileReader

FileReader(StringfuleName)

close()

int read(char[]cbuf)


6.  FileWriter

FileWriter(String fuleName)

close()

write(Stringvalue)

缺点:FileReader、FielWriter不能更改编码方式


7.  InputStreamReader和OutputStreamWriter

a) 特点

可以把一个字节楼转换成一个字符流(桥转换)

在转换时可以执行编码方式

b) InputStreamReader

InputStreamReader(InputStreamis)

InputStreamReader(InputStreamis,String charSet)

int read(char[]cbuf)

 

 

package chp14.ex12;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestInputStreamReader.java
 * @Description: InputStreamReader类的使用
 * @Create Date: 2012-8-18
 */
public class TestInputStreamReader {
   public static void main(String args[]) throws Exception{
	   InputStream is = new FileInputStream("oracle.txt");
	   InputStreamReader ir = new InputStreamReader(is);
	   char[] value = new char[1024];
	   int len = 0;
	   while((len=ir.read(value))!=-1){
		  for(int i=0;i<len;i++){
			  char c = value[i];
			  System.out.print(c);
		  }
		  System.out.println();
	   }
	}
}

c) OutputStreamReader

OutputStreamReader(OutputStreamos)

OutputStreamReader(OutputStreamos, String charSet)

write(Stringvalue)

8. 字符流过滤流

a)  BufferedReader

                       i.             字符过滤流

                     ii.             提供了缓冲功能

                   iii.             可以一行一行的读取内容 public String readLine();

 

package chp14.ex13;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestBufferedReader.java
 * @Description: BufferedReader 的使用
 * @Create Date: 2012-8-18
 */
public class TestBufferedReader {
  public static void main(String args[])throws Exception{
	  
	  InputStream is = new FileInputStream("oracle.txt");
	  InputStreamReader ir = new InputStreamReader(is);
	  BufferedReader br = new BufferedReader(ir);
	  String value = null;
	  while((value=br.readLine())!=null){
		  System.out.println(value);
	  }
	  
  }
}

b) 完整的字符输入流的开发步骤

                       i.             创建节点流

                     ii.             桥转换为字符流

                   iii.             在字符流的基础上封装过滤流

                    iv.             读/写数据

                      v.             关闭外层流

c)  PrintWriter

                       i.             字符过滤流

                     ii.             封装了缓冲功能

                   iii.             可以一行一行的输出内容 println();

                    iv.             第一种用法(字符流

 

package chp14.ex14;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestPrintWriter.java
 * @Description: PrintWriter的第一种使用方式
 * @Create Date: 2012-8-18
 */
public class TestPrintWriter {
  public static void main(String args[]) throws Exception{
	  
	  OutputStream os = new FileOutputStream("oracle.txt",true);
	  OutputStreamWriter ow = new OutputStreamWriter(os);
	  PrintWriter out = new PrintWriter(ow);//常规使用
	  out.println("suns");
	  out.flush();
	  out.close();
  }
}

                      v.             第二种用法(字节流) PrintWriter也有桥转换功能

 

package chp14.ex15;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

/**
 * 
 * @Author: Wentasy
 * @FullName: TestPrintWriter.java
 * @Description: PrintWriter的第二种使用方式
 * @Create Date: 2012-8-18
 */
public class TestPrintWriter {
  public static void main(String args[])throws Exception{
	  
	  OutputStream is = new FileOutputStream("sun1.txt");
	  //直接传入字节输出流 PrintWriter实现桥转换成字符流 再转换成过滤流
	  PrintWriter out = new PrintWriter(is);
	  out.println("hello test");
	  out.flush();
	  out.close();
  }
}


对象序列化

 

1.对象序列化

对象放在流上进行传输


2.可序列化

对象可以在流上进行传输 即称该对象可序列化


3.java.io.Serializable接口

a) 对象可序列化,需要实现该接口

b)  没有方法需要实现,仅仅是标识性接口通过网络传输

c)  小技巧:

一般double、int、对象等,存储在dat文件中


4.transient关键字

修饰属性,将不参与序列化


5.序列化时注意事项

a) 不要使用追加的方式书写对象

b) 如果一个对象的属性又是一个对象,则要求这个属性对象也实现了Serializable接口。

 

package chp14.ex09;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

//实现序列化接口
class Student implements Serializable{
	String name;
	int age;
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

/**
 * 
 * @Author: Wentasy
 * @FullName: TestSerializable.java
 * @Description: ObjectInputStream ObjectOutputStream 读写对象
 * @Create Date: 2012-8-18
 */
public class TestSerializable {
	public static void main(String[] args) throws Exception {
		Student stu1 = new Student("tom", 18);
		Student stu2 = new Student("jerry", 18);
		
		FileOutputStream fout = new FileOutputStream("stu.dat");
		ObjectOutputStream oout = new ObjectOutputStream(fout);
		oout.writeObject(stu1);
		oout.writeObject(stu2);
		oout.close();
		
		FileInputStream fin = new FileInputStream("stu.dat");
		ObjectInputStream oin = new ObjectInputStream(fin);
		Student s1 = (Student) oin.readObject();
		Student s2 = (Student) oin.readObject();
		oin.close();
		System.out.println(s1.name + " " + s1.age);
		System.out.println(s2.name + " " + s2.age);
		
	}
}


 

 

分享到:
评论

相关推荐

    Oracle 9i Java程序设计——使用PL/SQL和Java的解决方案

    原书名:Oracle 9i Java Programming &lt;br&gt;Oracle 9i Java程序设计——使用PL/SQL和Java的解决方案 &lt;br&gt;【原出版社】 Wrox Press 【作 者】Bjarki Holm,John Carnell等 【译 者】 康博 【丛 ...

    Oracle工作总结——日志文件切换频率的调整

    Oracle数据库的日志文件切换频率是数据库管理中的一个重要参数,它直接影响到系统的性能和稳定性。当日志文件频繁切换,可能表明数据库活动剧烈,这可能导致I/O瓶颈,影响系统响应时间。相反,如果切换频率过低,...

    oracle系统培训课件——资料包(7个ppt).rar

    这个“Oracle系统培训课件——资料包(7个ppt)”压缩文件包含了一系列PPT教程,旨在帮助学习者深入理解Oracle系统的各个方面。下面我们将详细探讨这些课件可能涵盖的关键知识点。 1. **Oracle概述**: - Oracle...

    LZ-031 Oracle大学培训资料——Oracle9i 数据库管理基础 I(中文版)

    本套“Oracle大学培训资料——Oracle9i 数据库管理基础 I(中文版)”旨在为初学者提供全面而深入的Oracle数据库管理基础知识,帮助读者掌握基本的数据库概念、安装配置以及日常维护技能。 在Oracle9i版本中,...

    Oracle经典教程1——走进Oracle

    ### Oracle经典教程1——走进Oracle #### Oracle简介 Oracle是一种基于对象的关系型数据库管理系统,它由美国甲骨文公司开发并维护。Oracle数据库系统因其高度可靠性和强大的数据处理能力而闻名,广泛应用于各种...

    Oracle10g 培训——基础知识

    Oracle 10g 是一款广泛使用的数据库管理系统,其基础知识对于初学者来说至关重要。本文将深入讲解Oracle 10g的一些核心概念和功能,包括新特性、数据库架构、实例的启动与关闭、监听与服务配置、用户与权限管理,...

    oracle系统培训课件——资料包(7个ppt)

    这个“Oracle系统培训课件——资料包(7个ppt)”提供了全面了解Oracle系统的宝贵资源,旨在帮助学习者掌握Oracle的基础知识、进阶技能以及实际操作经验。以下是对每个PPT可能涵盖的关键知识点的详细解读: 1. **...

    Oracle经典教程6——Oracle应用于.NET平台

    ### Oracle经典教程6——Oracle应用于.NET平台 #### 一、回顾ADO.NET ADO.NET(ActiveX Data Objects .NET)是一套面向对象的类库集合,主要用于.NET Framework中的应用程序与各种数据源进行交互。通过ADO.NET,...

    Oracle 11g 从入门到精通——第十四章(视频教程)

    这些知识点对于确保数据库高效运行、减少资源消耗、提升应用程序性能至关重要。 首先,我们来看“调整初始化参数”。Oracle数据库的初始化参数文件(init.ora或spfile.ora)定义了数据库启动和运行时的各种配置选项...

    Oracle9i备课笔记——吕海东

    Oracle9i备课笔记——吕海东 第1讲 Oracle9i简介 目的: 1. 了解数据库的发展,关系数据库的基本原理。 2. 了解目前市场上流行的数据库产品及特点 3. 了解Oracle数据库的发展 4. 掌握Oracle9i产品系列 5. 掌握Oracle...

    oracle 10培训资料——管理第二部分

    本部分培训资料主要关注的是Oracle实例的管理和初始化参数文件的使用。 首先,Oracle实例是数据库运行的核心组成部分,它包括了SGA(System Global Area)和后台进程。SGA是数据库共享内存结构,包含Redo Log ...

    Oracle工作总结——日志文件切换频率的调整.doc

    Oracle工作总结——日志文件切换频率的调整.doc

    java程序员必备——比较全的Java面试题

    Java的I/O流处理能力强大,涵盖了字符流、字节流、缓冲流、转换流等多种类型。面试中可能会要求编写读写文件、网络通信的代码,或者分析和优化I/O操作的性能。 七、数据库操作 JDBC是Java连接数据库的标准API,面试...

    Oracle EBS 视频教程——AP模块

    ### Oracle EBS视频教程——AP模块知识点概览 #### 一、Oracle EBS与AP模块简介 Oracle E-Business Suite(EBS)是一套全面的企业管理解决方案,它提供了丰富的功能来支持企业的各种业务流程,包括财务、供应链...

    java基础——————试题库

    这份“java基础——————试题库”资源旨在帮助学习者系统地复习和深入理解Java的基础知识,确保他们能够全方位地掌握这一强大的编程工具。下面将详细阐述Java的基础知识点。 1. **Java简介** - Java是由Sun ...

    ORACLE数据库课程设计——学生考勤系统的ORACLE实现.doc

    ORACLE数据库课程设计——学生考勤系统的ORACLE实现

    Oracle数据库管理员培训教材——10g版本

    以上是Oracle数据库管理员培训教材——10g版本中所涉及到的核心知识点,包括版本选择、平台选择、管理工具选择、SQL语句的学习与实践、备份的重要性、体系结构知识、学习衡量标准、图形界面的使用、安装过程的挑战、...

    oracle 10g培训资料——管理第一部分

    本培训资料主要聚焦于Oracle 10g的管理第一部分,特别是数据库的结构组件。了解这些组件对于有效管理和优化数据库至关重要。 Oracle 10g服务器是由一个Oracle实例和一个Oracle数据库组成的开放且全面的数据库管理...

    java连接oracle数据库———sqlHelper类

    本篇文章将深入探讨如何创建并使用`sqlHelper`类,以及它在Java与Oracle数据库集成中的关键作用。 首先,`sqlHelper`类通常包含以下几个核心功能: 1. **数据库连接**:使用JDBC(Java Database Connectivity)API...

Global site tag (gtag.js) - Google Analytics