JAVA-io流

来源:互联网 发布:搞笑一家人知乎 编辑:程序博客网 时间:2024/06/05 17:49
首先io流分为两个
I 代表的是Input(输入)
O 代表的是Output(输出)
分类1:
1.输入流:
输入指的是从磁盘(文件)中读取信息,以读取到内存 中
2.输出流:
指的是从内存中向磁盘中写入文件
如:做文件上传下载的时候皆是输出流
分类2
还有两种分类:
1.字节流:以字节为单位读取
 a)如:a (一个字节)
 b)国(两个字节)
2.字符流:以字符为单位读取
 a)如:a(一个字符)
 b)国(一个字符)
流的分类:
1.输入流
     1.字节输入流(InputStream)
     2.字符输入流(Reader)
2.输出流
    1.字节输出流(OutputStream)
    2.字符输出流(writer)
流的作用(也是他最主要的作用):
上传下载(qq头像,百度网盘,360云盘,,,,,)

要用流去读取文件需要具备什么?
流,文件(随意建)
文件也叫源文件或数据源

字节输入流
//首先是创建流对象
InputStream in = new FileInpitStream("路径")
//有参构造,需要传参,参数为源文件的路径
//注意:路径不可以直接使用\,可以使用\\或/
//这时会报错,是报catch的错,需要try,捕获一下
//下一步就是需要读
System.put.println(in.read());
//这时还会报错,没毛病,继续捕获
//你在创建对象下面输出时一般使用的是循环输出
//你想,如果用一般的System.out.print((char)in.read());输出
//这个输出的只能是一个字符,那你要是输出一篇文章那?
//你估计得累死
in.read() //返回的int类型的ASCII码值,当文件读取结束时,返回是-1
int 名1 = in.read ( );
while (名1 != -1){
System.out.print((char)in.read());
}

//这段代码的意思是:每当读取一个字符后,就给名1 重新赋值并输出
//再写
名1 = in.read();
/*这样就实现的循环,直到输出完所有字符。。。
把这些做完了就要注意另一个问题。
关流!!!
好比什么,就像是有一个大箱子里面大大小小共3个,
你需要先开大的再开小的,
但是你用完了,是先关小的最后关大的。。
但是!!!
要注意了,int在catch里面的,在catch里面是没办法关的,所以,要把InputStram放在try上面*/
InputStram in = null;
/*给他空值
随后就可以接着关了*/
finally{
if(名1 != null){
//关闭流,释放资源
try{
in.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
在写这几行代码时会老报错,为什么?
其实,并不是你写错了,其实是系统在告诉你这个地方容易出错,需要你小心,
所以!要捕获!!!
这个字节流代码它一般不用来读取文档,一般用来读取的是:图片,音乐,视频这些。。。。
想要读取文本模式的就用字符输入流。。。。

字符输入流

分类:
1。字符输入流(Reader)
    1.缓存输入流(BufferedReader)
    2.字节转换输入流(InputStreamReader)
        1.字符文件输入流(FileReader)

我们一般使用的是FileReader
Reader 名1 = new FileReader("路径")
//因为Reader不能被实例化,所以要用FileReader
//这时要catch一下try下要写
int 名1 = r.read();
while (名1 != -1) {
System.out.print((char) 名1);
名1 = r.read();

//随后就要关闭流了
在catch下
if(r!=null){
try{
r.close();
}
catch(IOException e){
e.printstackTrace();
}
}

/*如果输出的时候是乱码或者看不懂的字符,那么就要对文件做一点小手脚了,
打开小红本(EditPlus)在工具里点击“首选项”,然后再点文件,然后右边的默认编码,
在里面选择UTF-8即可。
当然,也可以用其他的来默认编码模式为UTF-8即可!
这两个代码其实几乎没什么不同,,,
所以,基本上会一个就能掌握俩了*/

随后讲讲字节输出流
分类:
1.字节输出流(OutputStream)
    1文件输出流(FileOutputStream)
    2对象输出流(ObjeOutStream)
    3过滤输出流(FilerOutputStream)
        1缓存流(BufferedOutSeream)
        2打印流(PrintStream)

写代码要有输出流和输出位置
OutputStream 名1 = new FileOutputStream("路径");
//顺便导包
//会报错,不用说了,catch
//接着往里面写
String str = "字";
byte[] by = str.getBytes();
//将字符串转换为字节,放到数组,给write
//记住,byte数组不能太长。。是要按字节去走的
名1.write(名1);
//再次catch,别忘了关流
//将  名1putStream 名1 = null;放外面
finally {
if(名1!=null){

名1.close();  //到这儿再次catch,将这一行包住,我就不写了
}
}

//这个代码String内的字是可以覆盖原来的字的
//并且如果没有路径中的文件,它会自己创建一个文件并输入String内的文字
//但不能创建文件夹!!!!

字符输出流(主要针对文档的)
结构:
1,Writer
    1缓存流(BufferdWriter)
    2字节到字符转换流(OutputSteamWriter)
          1字符文件输入流(FileWriter)
    3打印流(PrintWriter)
还是老规矩开头
public class WriterDemo{
public static void main(String[] args) {
Writer w = null;
try{
w = new FileWriter("d:\\writer.txt");
w.write("你好");

//是可以写字符的
//如果写两遍w.write("你好");是无法实现换行的效果的
//想在哪儿换行就在哪加上bufWriter.newLine();即可
}
catch (IOException e) {
e.printStackTrace();
}finally{
if(w!=null){
try {
w.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
越是到最后越短了。。。。
就这么多,到这儿了就基本是,,照抄,,,对,,,
基本一样。。。
好了今天就与大家分享这么多了,
还是那句话,
新手上路,请多关照
如有出错,请多包涵
评论指出,感激万分
老铁们,晚安!!!

原创粉丝点击