- 浏览: 154121 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
liveandevil:
我的一直出现驱动找不到的错误 你那个驱动jar文件时放在哪里 ...
JDBC数据库通用DAO -
zouc816:
hi,wjm901215
我看你这篇文章对mapXtreme ...
用mapXtreme Java开发web gis应用 (下)
1. 什么是IO?
I:input 输入 通常做读取操作(将不同数据源的数据读入到内存中,也叫读取流)
O:output 输出通常做写入操作(将内存中的数据写入到不同的数据源,也叫写入流)
2. 理解流的概念。
想像一下自来水公司要把水输到用户家里,应该先把自来水公司到用户家里的连接水管建好,再将水输出去。管道里输送的是水,但IO里输送的是字节。
u流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接.
u类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样
我们使用JAVA的IO操作,必须要使用java.io里的类,所以在使用之前先要导入这个包
3.了解java.io包下的整体结构层次
按层次高低划分 由低---高
3-1.字节流
•抽象父类是 InputStream 和OutputStream
3-2.字符流
抽象父类是 Reader 和 Writer
3-3.对象流
流的命名很有规律,一般是数据源加上流的名字,如:文件读取流就是FileInputStream,对象流就是ObjectInputStream。
需要注意的是字节流和字符流的区别
3-4..字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串(比如对图片文件的操作就只能用字节流)
3-5.一个字符可以是1个字节,也可以是2个或多个字节 一个字节就是8个位,也就是对同一数据源的操作用字符流可能效率更高
3-6.字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以(使用用字节流来传输字符文件会产生乱码)
注意,不管是哪一种流,在数据传输的底层,还是以字节方式传输。
4、操作流的步骤:
1、 建立流
2、 执行操作
3、 关闭流
5.掌握常用的输入流读取操作方法
– int read() //读取一个字节,返回字节的ASC码
–
int read(char cbuf[]) //读取字节进入chuf字符数组,返回读取的字节数
–
int read(char cbuf[], int offset, int length) //读取字节进入chuf字符数组,返回读取的字节数,offset为数据起始位置,length读入字节长度
–
– int available( );//获得读入流的字节长度
–
– close( );//关闭流
对于读入流,在建立流的时候,要求数据源必须存在。如建一个文件流:
FileInputStream fin = new FileInputStream("c:/2.mp3");
这时候,如果c盘下的2.mp3不存在的话会抛出一个FileNotFoundException异常。表示文件未找到。
6.掌握常用的输出流写入操作方法
– void write(int b)//写入一个字节进输出流。注意int b是这个字节的ASC码。
– void close()//关闭流
– void flush()//刷新流。
对于写入流,在建立流的时候,如果数据源不存在,系统会自动创建。如建立一个写入流。
FileOutputStream fout = new FileOutputStream("c:/2.mp3");
这时候,如果文件c:/2.mp3不存在的话,系统会自动创建一个2.mp3的文件,而不会抛出异常。
在操作写入流时要注意:写入流里的数据必须经过flush刷新或关闭流之后,数据才能写入目标数据源。如果不关闭或刷新流,则可能写不进数据源。如建立了一个文件写入流,如果在写入时不关闭或刷新流,则文件里的内容可能是空的。
7、流的操作
需求:将一个文件复制到另一个文件
代码示例:
public class IOTest {
public static void main(String[] args) {
FileInputStream fin=null;//申明一个读入流对象
FileOutputStream fout=null; //申明一个写入流对象
//注意申明时必须这样写,这是因为在建立流时要抛出一个FileNotFoundException异常,这是编译期异常,必须捕获。如果在try块里申明流对象,那么最后在关闭流时就访问不到了。
try {
//建立读入流,要求c:/2.mp3必须存在,如果不存在,会抛出文件找不到的异常
fin = new FileInputStream("c:/2.mp3");
//建立写入流,如果c:/2.mp3不存在,那么系统会自动创建,不会抛出异常
fout=new FileOutputStream("c:/3t3t.mp3");
} catch (FileNotFoundException e) {//捕捉文件找不到异常,这是编译期异常
e.printStackTrace();
}
try {
// byte[] info=new byte[fin.available()];//建立和读入流一样大小的字节数组
// fin.read(info);//读入流读取文件所有的字节进字节数组。
// fout.write(info);//将字节数组里的数据放入写入流
// int x=0;
// while((x=fin.read())!=-1){//利用读入流读取字节,返回的x为字节的ASC码,当x为-1时,文件读取完毕
// fout.write(x);//将这个字节写入输出流
// }
byte[] info=new byte[512];//创建一个大小为512的字节数组
int x=0;
while((x=fin.read(info))!=-1){//将字节读入到数组中,返回的x表示读入了多少个字节,当x是-1的时候,文件读取完毕
fout.write(info); //将字节数组里的数据放入写入流
}
} catch (IOException e) {//文件操作会抛出IO异常,这是编译期异常,必须捕捉
e.printStackTrace();
}
finally{
try {
fin.close();//关闭读入流
fout.close();//关闭写入流,如果不关闭,则文件可能是空的。
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
8、File类
u提供定位本地文件系统、描述文件和目录的功能
掌据常见的文件操作方法
//文件处理
String getName( ); //获得当前文件对象的文件名,不包括路径
String getParent(); //获得当前文件对象的路径,不包括文件名
String getAbsolutePath();//获得当前文件对象的绝对路径,包括文件名和路径
String renameTo(File newName);//将当前文件重命名,利用这个方法可以实现文件的移动
//文件属性测试
boolean exists( ); //判断当前文件对象对应的文件是否存在
boolean isFile( ); //判断当前文件对象是否是文件
boolean isDirectory( );//判断当前文件对象是否是目录
//文件信息 目录操作
long lastModified( );//返回文件最后修改时间
long length( ); //返回文件长度,即文件有多少个字节
boolean delete( );//删除当前文件对象对应的文件
boolean mkdir( ); //创建当前文件对象对应的目录
String[ ] list( );//返回当前文件对象对应目录所有的文件对应的信息
File[] listFiles();//返回当前文件对象对应目录所有的文件对应的文件对象
9、字符流
我们很多时候操作的对象都是字符和字符串,字符流可以让我们更有效的访问我们所需的字符和字符串,而不用再将字节转化成我们想要的字符串,从而简化我们的操作。
字符流抽象父类是Reader和writer。记的时候注意规律性,
对于字符流,我们需要掌握最常用的BufferedReader和BufferedWriter
字符读入流代码示例:
FileReader read=null;//申明文件字符读入流对象
BufferedReader br=null;//申明缓冲字符读流对象
try {
read=new FileReader("c:/e.txt");//创建文件字符读入流对象
br=new BufferedReader(read);//创建缓冲字符读流对象
String temp=null;//申明字符串临时变量
//循环行读取文件字符串,当临时字符串变量为null时,读取结束
while((temp=br.readLine())!=null){
System.out.println(temp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
字符写入流代码示例:
//申明字符输出流对象,这个对象介于字符流和字节流之间
OutputStreamWriter fout=null;
BufferedWriter bw=null;//申明缓冲字符输出流对象
try {
fout = new OutputStreamWriter(
new FileOutputStream("c:/e.txt",true));
//创建缓冲字符输出流对象
bw=new BufferedWriter(fout);
bw.write("abc");//向流写入字符
bw.newLine();//换一新行
bw.write("23");
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bw.close();
fout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
10、对象流
对象序列化:
u所谓对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象
想象一下电脑城买电脑桌,为了方便运输,事先将电脑桌拆成木块,到家里时再进行组装,这时候需要一张图低,告诉我们怎样把木块组装成桌子。
不管是哪一种流,在传输时都是以字节方式进行传输,对象流也不例外,先将对象变成字节以方便传输,到达目地的的时候再还原成对象。这样的话,对象序列化极为重要,利用它可以实现我们把字节以一定的方式重新还原成对象。对于远程对象传输和对象的文件操作都必须将对象序列化。
如何实现序列化:
u所有需要实现对象序列化的对象必须首先实现Serializable接口
代码示例:
public class Logon implements Serializable
在对象序列时,属性的修饰符可以为transient,它表示在对象进行传输时,该属性不做传输
对象流代码示例:
class Test implements Serializable {
transient int age;//transient表示在对象传输时,该属性不被传输
String name;
String sex;
Test(int age, String name, String sex) {
this.age = age;
this.name = name;
this.sex = sex;
}
}
//对象流操作示例:
Test test = new Test(2, "3333", "男");// 创建Test对象
ObjectOutputStream objOut = null;// 申明对象写入流对象
ObjectInputStream objIn = null;// 申明对象读取流对象
try {
objOut = new ObjectOutputStream(new FileOutputStream("c:/obj.txt"));// 创建对象写入流对象
objOut.writeObject(test);// 将对象写入文件
}catch(IOException e){
e.printStackTrace();
}
finally{
try{
objOut.close();
}catch(IOException e){
e.printStackTrace();
}
}
try{
objIn = new ObjectInputStream(new FileInputStream("c:/obj.txt"));// 创建对象读取流对象
Object obj = null;// 申明对象
try {
obj = objIn.readObject();// 从对象读取流对象中获得对象
} catch (ClassNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
Test temp = (Test) obj;// 将对象强转为Test类型
System.out.println(temp.age);
// 输出姓名,打印"3333"
System.out.println(temp.name);
// 输出性别,打印"男"
System.out.println(temp.sex);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {// 关闭流
try {
objIn.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
发表评论
-
JAX-WS一个很简单的RPC风格的Web Service同步调用
2013-01-10 17:13 939Web Service技术,无疑会越来越被广泛应用的,可 ... -
JAX-WS集成Web工程的Web Service的创建和发布简单入门(1)
2013-01-10 17:10 1031首先, 为了我们这个WS的实验能够顺利的完成,最好能到官 ... -
C3P0连接池配置
2012-11-08 10:07 925<c3p0-config> <defau ... -
Http学习之使用HttpURLConnection发送post和get请求 .
2012-10-29 15:40 1076最常用的Http请求无非是get和post,get请求可以获取 ... -
WebServices实例
2012-09-06 16:58 608http://www.cnblogs.com/mingzi/a ... -
博客文章
2012-08-23 14:13 0http://caoweiblog.sinaapp.com/ -
80端口被占用
2012-08-09 10:53 746netstat -aon|findstr "80&q ... -
ANT build.xml文件详解
2012-07-26 16:29 856Ant的优点 跨平台性。Ant是用Java语言编写的 ... -
关于C3P0超过最大连接数问题
2012-07-02 10:27 1163package com.innotek; import ... -
设置Eclipse背景色
2012-06-21 15:33 824(Window)-->(Preferences)--&g ... -
JSTL之formatNumber取整 .
2012-03-16 23:16 1757在网上查了许多资料都说EL表达式无法取整,的确EL表达式除法结 ... -
Apache APMServ 80端口被占用的最全面的解决方法
2011-12-14 13:35 374111小时前 在使用WampServer成功架设起Apache ... -
Eclipse中添加MyEclipse插件
2011-12-14 11:31 760众所周知eclipse是一个很强大的java IDE,而且它免 ... -
千万数量级分页存储过程,可支持多表查询,任意排序
2011-12-12 11:15 1212从程序中考虑:比如用 ... -
java技术大全网址
2011-11-28 14:20 772http://www.open-open.com/ -
Eclipse的TPTP使用方法
2011-10-09 13:56 1622Eclipse的TPTP工具使用方法:1. ... -
TPTP教程
2011-10-09 11:04 1121Eclipse Test and Performance To ... -
JExcelAPI修改Excel的实例
2011-09-09 14:33 865package com.jExcelApi.test; ... -
Java Excel API 使用方法(2)
2011-09-09 09:48 742Workbook类提供的方法 1. int getNumbe ... -
EL表达式取整或者取固定位小数 目前最好的方法
2011-07-28 10:37 921在网上查了许多资料都说EL表达式无法取整,的确EL表 ...
相关推荐
使用Java 实现 编程 输入/输出
Java输入输出流是Java编程中一个非常重要的概念,主要用于数据的读取和写入操作,包括文本文件和二进制文件。在实验9中,主要目的是理解和掌握I/O流的分类,以及如何进行文本和二进制文件的读写。 I/O流在Java中被...
Java程序设计中,与系统输入/输出界面进行数据通信是通过输入输出流(I/O流)实现的。I/O流是Java的核心特性之一,允许程序读取数据源(如键盘、文件)并写入数据目标(如显示器、文件)。在Java 2中,这个过程尤其...
java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流 java java输入输出 java输入流 java输出流
Java I/O类库是Java平台的核心部分,它提供了丰富的类用于处理...开发者可以根据具体需求选择合适的类和装饰器,构建出满足特定场景的输入输出系统。理解并熟练运用这些类和模式对于任何Java开发者来说都是至关重要的。
Java的输入输出流体系可以分为两大类:输入流和输出流。输入流用于读取数据,而输出流用于写入数据。 输入流的基类是InputStream,它提供了基本的读取操作。输出流的基类是OutputStream,它提供了基本的写入操作。 ...
在Java编程语言中,输入/输出流(Input/Output Stream,简称I/O流)是处理数据传输的基础。本文将深入探讨字符流的概念,包括它的作用、类型以及如何在实际编程中应用。首先,我们理解一下标题中的“字符流”:在...
实验报告三:Java输入输出 本实验主要涵盖了Java中输入输出的基本操作,旨在让学生深入理解数据流的概念,熟悉Java流的层次结构,并掌握文件的读写操作。实验内容包括从键盘接收用户输入并在屏幕上显示,读取并显示...
Java中的IO(输入/输出)是一种用于与外部资源(如文件、网络连接、数据库等)进行数据交互的机制。在Java中,主要使用java.io包提供的类和接口来进行IO操作。
在Java中,输入输出流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本次实验主要探讨了这两类流的使用,并通过实例代码展示了如何进行基本的输入输出操作。 首先,字节流主要用于处理二进制...
Java输入与输出(I/O)是Java编程语言中不可或缺的一部分,它允许程序与外部资源进行数据交换,如文件系统、网络、硬件设备等。在Java中,I/O操作被封装在许多类和接口中,形成了丰富的API。以下将详细介绍几个重要...
下面将详细阐述Java输入与输出流的相关知识点。 1. **流的概念**: 流是Java I/O的核心概念,它代表数据的源或目的地。流可以是向文件、内存、网络连接等地方读写数据。Java中的流分为字节流和字符流,字节流处理...
Java中的输入输出流是Java I/O(Input/Output)系统的核心组成部分,允许程序与外部数据源进行交互。在Java中,所有的I/O操作都基于流的概念,流是数据的序列,可以是字节流或字符流。Java I/O库提供了一系列的类来...
Java输入输出操作是Java编程中的基础且重要的一部分,它涵盖了数据的读取、写入以及文件和流的管理。在Java中,输入输出主要通过I/O流(Input/Output Stream)来实现,这些流用于在程序和外部资源之间传输数据。Java...
Java 输入/输出流是Java程序进行数据传输的关键机制,它允许程序从源(如键盘、文件)接收数据或将数据发送到目的地(如显示器、文件)。Java中的I/O流分为四类:字节流(Byte Streams)和字符流(Character Streams...
Java I/O 包是Java平台的核心部分,它提供了丰富的类和接口用于处理输入输出操作,包括文件操作和流式输入输出。在这个主题中,我们将深入探讨如何使用Java进行文件管理和流处理。 首先,我们来看看`java.io`包中的...
流是在输入输出之间流动的数据缓冲区,传送是串行的。 流一般分为输入流(Input Stream)和输出流(Output Stream)两类。流和物理文件是有区别的,流是一个动态的概念。比如一个文件,当向其中写数据时,它就是一个...
- 在Java中,标准输入输出是通过`java.lang.System`类实现的,其中`System.in`用于获取标准输入,而`System.out`用于输出数据。 - `System.in`是一个`InputStream`对象,可以用来读取用户从键盘输入的数据。 #### ...
学习Java输入输出,需要理解流的概念,熟悉各类流的使用,并结合实际场景选择合适的流类型。同时,掌握文件操作、对象序列化、NIO等相关知识,能让你在处理数据交换时更加得心应手。在实践中不断尝试和调试,你会...