Java IO 综述
2004-10-21 16:49
447 查看
Java IO 综述
看论坛里面有人问有关Java IO方面的东西,小弟不才。写些东西,希望给大家一些启发,也算是抛砖引玉吧。^_^
Java的IO包支持Java的基本输入/输出(I/O)系统,也包括文件的输入和输出。Java的IO部分,
我打算分两部分阐述,首先我们讨论IO子系统的基础,然后再讨论深入的部分。
如果你有Java编码的经验,你会发现这些程序里面并不是用到很多的IO子系统。
事实上,除了Print()和Println(),基本上没有用到其他的IO方法。原因很简单:
多数实际的Java应用程序并不是基于文本、控制台的,而是基于图形化的Appliaction,
这些程序依赖于用户的交互的Java AWT和Swing类。同时,Java对控制台IO程序的支持并不是很好,
甚至再简单的范例中都有些难以使用,但基于文本、控制台的Java 程序也需要我们来了解。
Java IO通过Stream(流)来实现。关于流,你可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,
也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。而对应于流还有一个概念:
输入、输出设备。这些设备可以是磁盘文件、键盘(输入设备)、显示器(输出设备)、打印机(输出设备)、
网络套接字等等。
下面,我们就来了解“流”。
Java中定义了两种类型的流:字节型,和字符型。
字节流:处理字节的输入和输出。包括读写二进制数据等方面的内容。
字符流:处理字符的输入和输出。他采用的是Unicode编码,可以实现国际化。
使用字符流的另外一个好处就是:字符流比字节流更有效率。
:::::::::::::::::::::字节流::::::::::::::
字节流包含两个顶层抽象类:InputStream和OutputStream。如下图所示。
从上面的两个抓图(抓图自J2SE 1。4。2 DOC)中,我们可以看出一下几点:
1:字节流的两个顶层类是抽象类,分别是:InputStream和OutputStream。
2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输出。
抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和
write()。这两个方法在InputStream和OutputStream中声明为抽象方法,由子流类overwrite实现。
:::::::::字节流::::::::::::::::::
同字节流类似,字符流也是通过两个顶层的抽象类Reader和Writer的子类来实现对Unicode字符流的处理的。
抽象类Reader和Writer定义了实用的方法,其中最主要的是read()和
write()。这两个方法在Reader和Writer中声明为抽象方法,由子流类overwrite实现。
对比两个表,你是否有什么发现?~~
^_^,是不是很多的类名和作用都差不多,没错!这些方法的不同之处仅仅在于一个是针对字节的,一个是针对字符的。
简单了解了流的概念和两种流的各种子类。下面我们通过一些简单的程序来实现上面的东西,
毕竟例子才是组好理解的东西。
1:读取控制台的输入。。。。。。
具体的语句如下:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
下面将这条语句分块解释一下:
System.in――》读取控制台的数据,他读取的是字节流。
InputStreamReader――》它的作用是将字节流转换为字符流。它的构造函数为:
InputStreamReader(InputStream inputStream)
BufferedReader――》将输入流缓冲处理,可以提高处理效率。
上面的语句也可以写成下面的形式更容易理解。。
InputStreamReader ins = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(ins);
2:控制台输出。。。。。。。。。。。。。
控制台输出可以使用print()和println(),这个方法很容易使用。其他可以使用
write()方法来实现输出。它的构造函数为:
void write(int byteval)
下面是一个例子程序:
class writeExample
{
public static void main(String args[])
{
int n;
a = ‘a’;
System.out.write(a);
System.out.write(‘/n’);
}
}
3:读取字符。。。。。。。。。。。。。。。。。。
使用前面的BufferedReader定义的一个方法read()来读入的返回值为int,
所以为了返回一个char,要进行转换。Read()的构造函数:
int read() throws IOException
具体程序如下:
import java.io.*;
class readExample
{
public static void main(String args[]) throws IOException
{
char a;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(“Enter q to quit.”);
a= (char) br.read(); //从输入流中读出存入(char) a中
If(a != ‘q’)
System.out.println(a);
}
}
4:读取字符串。。。。。。。。。。。。。。。。。。。。。
使用函数:readLine() 它的常用形式为:
String readLine() throws IOException
import java.io.*
class readLineException
{
public static void main(String args[]) throws IOException
{
String str;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(“Enter a string line, q to quit.”);
Str = b.readLine();
If(str != q)
System.out.println(str);
}
}
5:关于文件的读写。。。。。。。。。。。。。。。。。。。。。。。。。。
Java提供了对文件的读写,但是有一点要注意的是:所有的文件都是面向字节的。
但是Java允许我们在基于字符的对象来包装面向字节的文件。
两个对文件的操作的流类是:FileInputStream和FileOutputStream。这两个类的构造函数为:
FileInputStream(String filename)throws FileNotFoundExcepiont
FileOutPutStream(String filename)throws FileNotFoundException
此两个类定义了几个使用的函数:
在对文件操作完之后,要使用close()方法关闭文件。
void close() throws IOException
用于读取一个文件,要使用read()读出的是字节流,如果读到文件的末尾
read()会返回 -1 。
int read() throws IOException
用于写入一个文件,使用write()来将字节流写入要求的文件中,
此方法将参数写入到要求的文件中,但是要注意只有低8个字节才能写入文件。
下面是一个例子程序:
import java.io.*;
class copyFile
{
public static void main(String args[]) throws IOException
{
int n;
FileInputStream fin;
FileOutputStream fout;
try
{
try
{
fin = new FileInputStream(args[0]);
}
catch(FileNotFoundException e)
{
System.err.println(e);
return;
}
try
{
fout = new FileOutputStream(args[1]);
}
catch(FileNotFoundException e)
{
System.err.println(e);
return ;
}
}
catch(ArrayInedxOutBoundsException e)
{
System.err.println(e);
return ;
}
try
{
do
{
n = fin.read();
if( n != -1)
fout.write(n);
}
while(n != -1);
}
catch(IOException e)
{
System.err.println(e);
}
fin.close();
fout.close();
}
}
看论坛里面有人问有关Java IO方面的东西,小弟不才。写些东西,希望给大家一些启发,也算是抛砖引玉吧。^_^
Java的IO包支持Java的基本输入/输出(I/O)系统,也包括文件的输入和输出。Java的IO部分,
我打算分两部分阐述,首先我们讨论IO子系统的基础,然后再讨论深入的部分。
如果你有Java编码的经验,你会发现这些程序里面并不是用到很多的IO子系统。
事实上,除了Print()和Println(),基本上没有用到其他的IO方法。原因很简单:
多数实际的Java应用程序并不是基于文本、控制台的,而是基于图形化的Appliaction,
这些程序依赖于用户的交互的Java AWT和Swing类。同时,Java对控制台IO程序的支持并不是很好,
甚至再简单的范例中都有些难以使用,但基于文本、控制台的Java 程序也需要我们来了解。
Java IO通过Stream(流)来实现。关于流,你可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,
也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。而对应于流还有一个概念:
输入、输出设备。这些设备可以是磁盘文件、键盘(输入设备)、显示器(输出设备)、打印机(输出设备)、
网络套接字等等。
下面,我们就来了解“流”。
Java中定义了两种类型的流:字节型,和字符型。
字节流:处理字节的输入和输出。包括读写二进制数据等方面的内容。
字符流:处理字符的输入和输出。他采用的是Unicode编码,可以实现国际化。
使用字符流的另外一个好处就是:字符流比字节流更有效率。
:::::::::::::::::::::字节流::::::::::::::
字节流包含两个顶层抽象类:InputStream和OutputStream。如下图所示。
从上面的两个抓图(抓图自J2SE 1。4。2 DOC)中,我们可以看出一下几点:
1:字节流的两个顶层类是抽象类,分别是:InputStream和OutputStream。
2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输出。
抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和
write()。这两个方法在InputStream和OutputStream中声明为抽象方法,由子流类overwrite实现。
:::::::::字节流::::::::::::::::::
同字节流类似,字符流也是通过两个顶层的抽象类Reader和Writer的子类来实现对Unicode字符流的处理的。
抽象类Reader和Writer定义了实用的方法,其中最主要的是read()和
write()。这两个方法在Reader和Writer中声明为抽象方法,由子流类overwrite实现。
对比两个表,你是否有什么发现?~~
^_^,是不是很多的类名和作用都差不多,没错!这些方法的不同之处仅仅在于一个是针对字节的,一个是针对字符的。
简单了解了流的概念和两种流的各种子类。下面我们通过一些简单的程序来实现上面的东西,
毕竟例子才是组好理解的东西。
1:读取控制台的输入。。。。。。
具体的语句如下:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
下面将这条语句分块解释一下:
System.in――》读取控制台的数据,他读取的是字节流。
InputStreamReader――》它的作用是将字节流转换为字符流。它的构造函数为:
InputStreamReader(InputStream inputStream)
BufferedReader――》将输入流缓冲处理,可以提高处理效率。
上面的语句也可以写成下面的形式更容易理解。。
InputStreamReader ins = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(ins);
2:控制台输出。。。。。。。。。。。。。
控制台输出可以使用print()和println(),这个方法很容易使用。其他可以使用
write()方法来实现输出。它的构造函数为:
void write(int byteval)
下面是一个例子程序:
class writeExample
{
public static void main(String args[])
{
int n;
a = ‘a’;
System.out.write(a);
System.out.write(‘/n’);
}
}
3:读取字符。。。。。。。。。。。。。。。。。。
使用前面的BufferedReader定义的一个方法read()来读入的返回值为int,
所以为了返回一个char,要进行转换。Read()的构造函数:
int read() throws IOException
具体程序如下:
import java.io.*;
class readExample
{
public static void main(String args[]) throws IOException
{
char a;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(“Enter q to quit.”);
a= (char) br.read(); //从输入流中读出存入(char) a中
If(a != ‘q’)
System.out.println(a);
}
}
4:读取字符串。。。。。。。。。。。。。。。。。。。。。
使用函数:readLine() 它的常用形式为:
String readLine() throws IOException
import java.io.*
class readLineException
{
public static void main(String args[]) throws IOException
{
String str;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(“Enter a string line, q to quit.”);
Str = b.readLine();
If(str != q)
System.out.println(str);
}
}
5:关于文件的读写。。。。。。。。。。。。。。。。。。。。。。。。。。
Java提供了对文件的读写,但是有一点要注意的是:所有的文件都是面向字节的。
但是Java允许我们在基于字符的对象来包装面向字节的文件。
两个对文件的操作的流类是:FileInputStream和FileOutputStream。这两个类的构造函数为:
FileInputStream(String filename)throws FileNotFoundExcepiont
FileOutPutStream(String filename)throws FileNotFoundException
此两个类定义了几个使用的函数:
在对文件操作完之后,要使用close()方法关闭文件。
void close() throws IOException
用于读取一个文件,要使用read()读出的是字节流,如果读到文件的末尾
read()会返回 -1 。
int read() throws IOException
用于写入一个文件,使用write()来将字节流写入要求的文件中,
此方法将参数写入到要求的文件中,但是要注意只有低8个字节才能写入文件。
下面是一个例子程序:
import java.io.*;
class copyFile
{
public static void main(String args[]) throws IOException
{
int n;
FileInputStream fin;
FileOutputStream fout;
try
{
try
{
fin = new FileInputStream(args[0]);
}
catch(FileNotFoundException e)
{
System.err.println(e);
return;
}
try
{
fout = new FileOutputStream(args[1]);
}
catch(FileNotFoundException e)
{
System.err.println(e);
return ;
}
}
catch(ArrayInedxOutBoundsException e)
{
System.err.println(e);
return ;
}
try
{
do
{
n = fin.read();
if( n != -1)
fout.write(n);
}
while(n != -1);
}
catch(IOException e)
{
System.err.println(e);
}
fin.close();
fout.close();
}
}
相关文章推荐
- Java IO 综述
- java.io.FileNotFoundException: class path resource [WEB-INF/classes/cn/golaxy/yqpt/pojo/] cannot be resolved to URL because it
- 【struts2文件下载】Can not find a java.io.InputStream with the name [downloadFile]...
- java io系列04之 管道(PipedOutputStream和PipedInputStream)的简介,源码分析和示例
- java io 使用递归删除指定的文件夹及其子文件夹和文件 先测试再正式使用哦
- hibernate的get(java.lang.Class arg0, java.io.Serializable arg1)
- hive启动报错 java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7B
- Java Io 流(输入输出流)
- Java IO最详解
- java新IO---文件锁
- JSP上传图片产生 java.io.IOException: Stream closed异常解决方法
- java io系列26之 RandomAccessFile
- 转换webp格式图片,java.io.IOException: Cannot run program "dwebp": error=2, No such file or directory
- Caused by: java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be ope
- 黑马程序员-JAVA高级(IO输入与输出)PART2
- 严重: IOException while loading persisted sessions: java.io.EOFException
- java io系列23之 BufferedReader(字符缓冲输入流)
- java.io.File文件操作容易失误的两点--mkdirs()、删除目录
- Java IO:IO框架
- java.io.EOFException 问题