java中I/O流学习笔记

对于I/O流一直有种云里雾里的感觉,感觉学习的不深入,用的也不是很好,今天写这篇学习笔记,也没有深入的剖析,仅仅是加深一下用法体会。

我相信很多人一开始都会有这样一个迷惑,到底什么是输入流什么输出流,什么样的情况用输入流,什么时候又要用的是输出流呢?以FileInputStream和FileOutputStream为例,就我而言,用一个笨办法来分清输入输出,out是往外出,取它的反义,那FileOutputStream对应的就是写入情况,即往一个文件中写入内容;in是进入,取反义就是出去,那FileInputStream对应的就是读取的情况,即从一个文件中读取内容。同理以read和write结尾的也是这样区分;当然按照正常的思维,这个图应该帮助大家更形象的理解。

一、首先了解一下File类

了解一下File类中的基本方法和常量

1)File中常用的两个常量File.separator(输出为\) 和File.pathSeparator(输出为;)

定义一个路劲一般就直接定义比如:String str = "D:\\Hello.txt",但是这种在不同的系统中不通用,跨平台性能有局限性,但是使用File自带的常量就可以解决这种跨平台问题比如:

Strign str = "d:"+File.separator+"Hello.txt";

2)创建一个新的文件

public class Hello{

public static void main(String[] args){

String fileName = "F:"+File.separator+"Hello.txt";

File f = new File(fileName);

try{

f.createNewFile();

}catch(Exception e){

e.printStackTrace;

}

}

}

3)删除一个文件

public class Hello{

public static void main(String[] args){

String fileName = "F:"+File.separator+"Hello.txt";

File f = new File(fileName);

if(f.exists()){

f.delete();

}else{

System.out.println("文件不存在");

}

}

}

4)创建一个文件夹

public static void Method(){
String fileName = "f:"+File.separator+"Hello";
File f = new File(fileName);
f.mkdir();
}

5)列出指定目录的全部文件

public static void Method5(){
String fileName = "f:"+File.separator;
File f = new File(fileName);
//String[] str = f.list();//列出的不是完成路劲,返回的是String数组
File[] str = f.listFiles();//这个列出的是完整路劲,返回的是File数组
if(str.length>0){
for(int i = 0;i<str.length;i++){
System.out.println(str[i]);
}
}
}

6)判断一个文件是否是文件夹

public void method(){

String fileName = "f:"+File.separator;
File f = new File(fileName);

if(f.isDirectory){

System.out.println("是文件夹);

}else{

System.out.println("不是文件夹");

}

}

7)搜索指定目录下的全部内容

public static void Method6(){
String fileName = "f:"+File.separator;
File f = new File(fileName);
print(f);
}
public static void print(File f){
if(f!=null){
if(f.isDirectory()){
File[] fileArray = f.listFiles();
if(fileArray.length>0){
for(int i = 0; i<fileArray.length;i++){
print(fileArray[i]);
}
}
}else{
System.out.println(f);
}
}
}

二、I/O流

从流的方向,可以分为输入流(inputStream,reader)和输出流(outputStream,writer)

从流的应用,可以分为字节流(inputStream,outputStream)和字符流(reader,writer)

1)字节流写入文件

public void method(){

String fileName = "F:"+File.separator+"Hello.txt";

File f = new File(fileName);

OutputStream out = new FileOutputStream(f);

String str = "你好";

byte[] b = str.getBytes();

out.write(b);//这里也可以一个一个字节的写

/**

for(int i = 0;i<b.length;i++){

out.write(b[i]);

}

*/

out.close();

}

2)字节流读取文件

public void method(){

String fileName = "f:"+File.separator+"Hello.txt";

File f = new File(fileName);

InputStream in = new FileInputStream(f);

byte[] b = new byte((int)f.length);//跟文件的大小一样的内存,这样避免浪费

int temp = 0;

int count = 0;

while((temp = in.read())!=-1){

b[count++] = (byte)temp;

}

in.close();

System.out.println(new String(b));

}

3)字符流写文件

public  void method(){

String fileName = "F:"+File.separator+"Hello.txt";

File f = new File(fileName);

Writer out = new FileWriter(f);

String str = "你好";

out.write(str);

}

4)字符流读文件

public void method(){

String fileName = "f:"+File.separator+"Hello.txt";

File f = new File(fileName);

Reader in = new FileReader(f);

char[] c = new char[(int)f.length()];

int temp = 0;

int count = 0;

while((temp = in.read())!=-1){

c[count++] = (char)temp;

}

in.close();

System.out.println(new String(b));

}

==>字符流写文件和字节流效果没什么区别,只不过字符流在写入的时候需要先转换成字节文件,而字符流可以直接读取字符。对于输入流的read()方法,

Reader read = new FileReader(fileName);

char[] c = new char[100];

read.read(c);//当以这种方式一次性读取的时候,read()方法返回的是数组的长度

------------------------------------------------------------

int temp = 0;

int count = 0;

while((temp = in.read())!=-1){

c[count++] = (char)temp;

}

当以这种一个一个的读取的方式,read()返回的是每个每个字符对应的int型整数

5)使用程序复制文件

public void method(){

String fileName1 = "d:"+File.separator+"Hello.txt";

String fileName2 = "f:"+File.separator+"Hello.txt";

File f1 = new File(fileName1);

File f2 = new File(fileName2);

if(!f2.exists()){

System.out.println("被复制的文件不存在");

}

InputStrean in = new FileInputStream(f2);

OutputStream out = new FileOutputStream(f1);

int tem = 0;

while((tem = in.read())!=-1){

out.write(tem);

}

in.close();

out.close();

}

6)将字节输出流转换成字符输出流

public void method(){

String fileName = "f:"+File.separator+"Hello.txt";

File f = new File(fileName);

Writer out = new OutputStreamWriter(new FileOutputStream(f));

out.write("你好");

out.close();

}

7)将字节输入流转换成字符输入流

public void method(){

String fileName = "f:"+File.separator+"Hello.txt";

File f = new File(fileName);

Reader in = new InputStreanReader(new FileInputStrean(f));

char[] c = new char[(int)f.length];

in.read(c);

System.out.println(new String(c));

in.close()

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值