您的位置:首页 > 编程语言 > Java开发

java的io操作杂记

2015-06-05 08:48 337 查看
一、File类

1.在各个操作系统中,实际上路径的分隔符是不一样的,例如:windows中使用反斜杠:”\“,Linux中使用正斜杠:”/“。如果想让java的可移植性继续保持,则最好根据所在的操作系统来自动使用分隔符。即使用File中的常量。例如:

import java.io.File;
import java.io.IOException;
public class FileDemo(){
public static void main(String[] args){
File f = new File("d:"+File.separator+"test.txt");
try{
f.createNewFile();
}catch(Exception e){
e.printStackTrace();
}
}
}


2.当不知道读取内容为多大时,就只能以读取的数据是否为-1为读完标志了。

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

public class InputStreamDemo03 {

/**
* @param args
* @throws FileNotFoundException
* 对于大的文件,例如试了一个15KB的文件,最后在b[len] = (byte)temp;这句话上会报错,换了一个小的文件就可以了
* 原因:一开始定义的byte[]数组的大小定义的为1024,也就是1KB,如果想撑得下SignFile.txt文件,要定义成大于1024*15=15360个字节
*/
public static void main(String[] args) throws Exception {
//1.使用file类找到一个文件
File fl = new File("d:"+File.separator+"SignFile.txt");					//声明File对象
//2.通过子类实例化父类对象
InputStream input = null;																		//准备好一个输入对象
input = new FileInputStream(fl);														//通过对象多态性,进行实例化
//3.进行读操作
byte b[] = new byte[15400];																	//数组大小由文件决定
int len = 0;
int temp = 0;																								//接收每个读取进来的数据
while((temp=input.read())!=-1){
//表示还有内容,文件没有读完
b[len] = (byte)temp;
len++;
}
//4.关闭输出流
input.close();
System.out.println("内容为:"+new String(b,0,len));
}

}


3. 在java.io中操作文件内容的类主要有两大类:字节流和字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutPutStream完成,输入数据主要是使用InputStream完成。在字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。

内容操作就4个类:OutputStream,InputStream,Writer,Reader。以上4个类都属于抽象类。IO操作属于资源操作,操作之后必须关闭,否则就会出现未知的错误。

字节流:

字节流主要是操作byte类型数据,以byte数组为准,主要操作类就是OutputStream,InputStream。

字符流:

在程序中一个字符等于2个字节,java提供了Reader和Writer两个专门操作字符流的类。

两者的区别:字节流在操作的时候本身是不会用到缓冲区的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。

                         开发中是使用字节流好还是字符流好呢?在所以的硬盘上保存文件或是进行文件传输的时候都是以字节的方式进行的。包括图片也是按字节流传输的,而字符是只有在内存中才会形成的。所以使用字节的操作是最多的。对于图片的操作只能使用字节流。

操作流程:

A.使用File类打开一个文件

B:通过字节流或字符流的子类,指定输出的位置。

C.进行读写操作

D.关闭输入/输出

4.完成拷贝程序,有两种方式可以采用:

*实现一:将源文件中的内容全部读取出来,之后一次性写入到目标文件

*实现二:边读边写的方式(主要采用这种方式)

二、内存流

将数据写入到内存中,或者从内存中读取数据。

ByteArrayInputStream的主要完成将内容写入到内存中

ByteArrayOutputStream的功能主要是将内粗年数据输出

三、管道流

管道流的主要作用是可以进行另个线程之间的通讯,分为管道输出流(PipedOutputStream)和管道输入流(PipedInputStream),如果想要进行管道输出,则必须把输出流连在输入流之上,在PipedOutput类上有如下方法用于连接管道:

public void connect(PipedInputStream snk) throws Exception{}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 文件传输 数据