Java IO流

来源:互联网 发布:社交软件下载 编辑:程序博客网 时间:2024/06/08 17:45
java.io

io:in/out.
输入输出的就是字节,这些字节就是我们的程序中的数据。
IO流,即数据流,由序列的一串字节序列。
IO包的核心:输入流
:InputStream,Reader 输出流:OutputStream
,Writer 

InputStream和Reader 是输入流,输入是站在程序的角度而言。
例:程序从文件读取数据。

OutputStream和Writer是输出流,输出也是站在程序的角度。
例:程序将当前状态保存到文件。
InputStream和OutputStream是字节流。

Writer和Reader是字符流。

File构造方法:
File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。 
pathname:"C:/Users/user/Desktop/天黑请闭眼.txt"
例如:
创建File对象

File    file = new  File("C:/Users/user/Desktop/天黑请闭眼.txt");


File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
例如:
创建File对象

File    files = new  File(file,file.getName());


File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。"C:/Users/user/Desktop","天黑请闭眼.txt"
例如
创建File对象
File   file = new  File("C:/Users/user/Desktop","天黑请闭眼.txt"); 

File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
"file:///C:/Users/user/Desktop/天黑请闭眼.txt" 。
例如
创建File对象
File   fileUri = new  File("file:///C:/Users/user/Desktop/天黑请闭眼.txt" );

File的字段
pathSeparator和pathSeparatorChar :win下是‘;’,UNIX下是‘:’。
separator 和separatorChar:win下是 '\',UNIX下是‘/’。
TIPS:为了实现跨平台的适应性,我们尽量使用File的这些字段分隔路径名和路径。

File的重要方法:

createNewFile() ,如果我们这个文件不存在,那么创建一个到本地系统。

exists(),获取此文件是否存在。存在返回true,否则为false。

delete() ,删除此File对象所映射的真实文件。

getAbsolutePath() ,获取此对象的绝对路径。

isDirectory() ,判断该File对象,是不是目录(文件夹)。

isFile(),判断该File对象,是不是文件(不是文件夹)。


File(目录)的方法

mkdir() ;创建目录,但是如果父目录不存在,就无法创建

mkdirs() ;创建目录,如果没有父目录,就连父目录一起创建


list(),listFile(); 获取出子文件

例如:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileDirCopy {


public static void main(String[] args) throws Exception {
//源文件
File  src=new File("D://QQ5.5.exe");
//目标地
File  tar=new File("C://Users//Uesr//Desktop");
//拷贝
Copy(src,tar);
}
public static void  Copy(File  src,File  tar) throws Exception{
//不能操作,就不管
if(!src.canExecute()){
return ;
}
if(src.isFile()){
//是文件就调用不同文件拷贝
copyFile(src,tar);
}else{
//不是文件就调用目录拷贝
copyDir(src,tar);
}


}
/**
* 拷贝目录

* */
public static void   copyDir(File   src,File  tar) throws Exception{
//新建一个目录文件对象
File    file=new File(tar,src.getName());
//真实创建目录
file.mkdirs();
//拷贝该目录内的子文件
File[]  files=src.listFiles();

for(File  f: files){
//调用我们的拷贝文件
copyFile(f,file);

}

}
/**

* 文件的复制
* */
public  static void  copyFile(File   src,File  tar) throws Exception{

//新创建一个和源文件相同的名字在文件新目录下
File  newFile=new File(tar,src.getName());
//在io操作时,会自动创建这个问文件
newFile.createNewFile();
//创建FileOutputStreanm
FileOutputStream   fos=new FileOutputStream(newFile);
//创建FileInputStream
FileInputStream   fis=new  FileInputStream(src);
//先判断有无数据,需要转移
if((fis.available())>0){
//边度编写
byte  b=0;
int   length=0;
byte[]    bytes=new byte[1024];
while((length=fis.read(bytes))!=-1){
fos.write(bytes,0,length);
}
//读取完毕,也写完了
fis.close();
//强制清除去
fos.flush();
fos.close();
}

}

}


字符流:Reader和Writer


Reader方法
read();这个read方法将给予我们以char为单位的读取数据能力。
skip();跳过。
close();关闭流。
readLine();一次读一行。
newLine();标识符,换行。


Writer方法
append();  添加字符。
write();以字符为单位写入数据。
flush();强制刷新write管道的数据。
close();关闭流。一般将数据写入到文件中,先要调用flush()方法将管道中的数据刷新出去,在调用close()方法关闭流。
readLine();一次读一行。
newLine();标识符,换行。


缓冲流:
BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,这些就是缓冲流。

例如:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


public class FileBuffer {
public static void main(String[] args) {
//
try {
BufferedInputStream    bis=new BufferedInputStream(
new FileInputStream("../java20141218/src/com/feicui/group1/FileDirCopy.java"));
try {
//判断是否有数据
if(bis.available()>0){
//缓冲
if(bis.markSupported()){
bis.mark(2);
System.out.println((char)bis.read());
System.out.println((char)bis.read());
System.out.println((char)bis.read());

bis.reset();
System.out.println((char)bis.read());
System.out.println((char)bis.read());
System.out.println((char)bis.read());
System.out.println((char)bis.read());
System.out.println((char)bis.read());

}


}
} catch (IOException e) {

e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

}


转换流
OutputStreamWriter:OutputStreamWriter是字符流通向字节流的桥梁:使用指定的 charset 将要向其写入的字符编码为字节。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。 每次调用 write() 方法都会针对给定的字符(或字符集)调用编码转换器。在写入基础输出流之前,得到的这些字节会在缓冲区累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。为了达到最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中以避免频繁调用转换器。

例如: BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));


InputStreamReader:InputStreamReader是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。每次调用其一个 read() 方法都会导致从基础输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从基础流读取更多的字节,使其超过满足当前读取操作所需的字节。为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。
例如: BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
0 0
原创粉丝点击