黑马程序员-----Java基础-----IO流-1

来源:互联网 发布:网络礼仪作文 编辑:程序博客网 时间:2024/05/21 06:28

-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


IO流学习-1


import java.io.FileWriter;
import java.io.IOException;
import java.io.*;

 IO流常用的抽象基类
字符流的抽象基类
Reader   Writer 。

 字节流的抽象基类
 InputStream   OutputStream  。
 
 注意:由这四个派生出来的子类名称都是以其父类作为子类名的后缀
 
 如: InputStream的子类  FileInputStream
  Reader    FileReader。
   
字符流的特点:
io流适用于操作数据的,
数据的最常见体现形式就是--》文件。
那么先以操作文件为主,


  需求:在硬盘上,创建一个文件并写入一些文字数据。
找到一个专门用于操作文件的Writer 子类对象,FileWriter
前缀名是流对象的功能。需要倒包 java.io.*;


public class IOtest1 {
public static void main(String[] args)throws IOException
{
//创建一个FileWriter对象,该对象一被初始化就必须明确备操作的文件。
//而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。
//其实该部就是在明确数据要存放的 目的地。

FileWriter fw = new FileWriter("demo.txt");

//调用writer方法,将字符串写入到流中。
fw.write("abcdef");

//刷新流对象中的缓冲中的数据。
//将数据刷到--》目的地
fw.flush();

//关闭流资源,但是关闭前会刷新一次内部的缓冲中的数据。
//将数据刷到--》目的地中。
//和flush区别: flush刷新后,流可以继续使用,close刷新后流关闭。
fw.close();

}
}
--------------
package IO1;

IO 异常的处理方式

import java.io.*;
public class IOtest2 {

public static void main(String[] args) {

//fw在外部建立引用。在try内进行初始化,这样fw作用于整个函数,不然
//fw.colse 访问不到。
FileWriter fw = null;
try 
{
   fw = new FileWriter("demo.txt");
fw.write("abcdef");


catch (IOException e) 
{
System.out.println("catch+"+e.toString());
}
finally
{
try {
//一定要判断是否为空,有几个流,判断几次。
if(fw!= null)
//关流一定要执行。
fw.close();


catch (IOException e) {
System.out.println(e.toString());
}
}

}
}
------------------
package IO1;

import java.io.FileWriter;
import java.io.IOException;

/**
 演示对已有文件的数据续写。
 */
public class IOtest3 {
public static void main(String[] args) {
//传递一个true参数,代表不覆盖已有文件
//并在已有文件的末尾处进行数据续写。

FileWriter fw = null;
try 
{
   fw = new FileWriter("demo.txt",true);
fw.write("haha\r\nxiexie");//\r\n  换行符。


catch (IOException e) 
{
System.out.println("catch+"+e.toString());
}
finally
{
try {
if(fw!= null)
fw.close();


catch (IOException e) {
System.out.println(e.toString());
}
}

}

}
---------------------
package IO1;
import java.io.*;
public class IOtest4 {
public static void main(String[] args) throws IOException
{
//创建一个文件读取流对象,和指定名称的文件相关联
//要保证该文件是已经存在的,如果不存在,会发生异常,FileNotFoundException;
FileReader fr = new FileReader("demo.txt");

//调用读取流对象的read方法,
//read();一次读取一次字符,自动往下读

/* int ch1 = fr.read();
System.out.println("ch1="+(char)ch1);

int ch2 = fr.read();
System.out.println("ch2="+(char)ch2);*/

//读到末尾返回-1.

//优化后。
int ch = 0;
while(( ch = fr.read())!=-1)
System.out.println("ch="+(char)ch);

/*while(true)
{
int ch =fr.read();
if(ch==-1)
break;
System.out.println("ch="+(char)ch);
}*/
fr.close();

}

}
-------------------------
package IO1;
import java.io.FileReader;
import java.io.IOException;

//第二种方法,定义一个数组,通过字符数组进行读取。
public class IOtest5 {
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("demo.txt");

//定义一个字符数组,由于存储读到的字符,
//该read(char[]) 返回的是读到字符个数;
char[] buf = new char[1024];
// int num = fr.read(buf);
// System.out.println("num ="+num+ "---"+ new String(buf));
//  
// int num1 = fr.read(buf);//偏移0位 取一个,就取到d了,
// System.out.println("num1 ="+num1+ "---"+ new String(buf,0,1));
// fr.close();
//  
int num =0;
while((num = fr.read(buf))!=-1)
{
System.out.println(new String(buf,0 ,num));
}
}
}
----------------
package IO1;
//读取一个。java文件 并打印在控制台上。
import java.io.*;
public class IOtest6 {
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("demo.txt");//这里选取java文件。
char [] buf =new char[1024];
int num =0;
while((num = fr.read(buf) )!=-1)
{
System.out.println(new String(buf ,0,num));
}
fr.close();
}
}
-------------
package IO1;
//将c盘一个文本文件复制到d盘  XX
/**
 复制原理:
 其实就是将c盘下的文件数据存储到d盘的一个文件中。
 步骤:
 1,在d盘创建一个文件,用于存储c盘文件中的数据。
 2,定义读取流和c盘文件关联。
 3,通过不断的读写完成数据存储。
  4,关闭资源。
 **/
import java.io.*;


public class IOtest7 {
public static void main(String[] args)throws IOException
{

copy1();
copy2();
}
public static void copy2()
{
FileWriter fw =null;
FileReader fr = null;
try {

fw = new FileWriter("demo1.txt");//要写到的文件

fr = new FileReader("demo2.java");//需要读取文件

char [] buf = new char [1024] ;
int len = 0;
while ((len = fr.read(buf))!=-1)
{
fw.write(buf ,0 ,len);
}
} catch (IOException e) {
throw new RuntimeException("读写失败");

}
finally
{
if(fr !=null)
try {
fr.close();
} catch (IOException e) {

}
if(fw !=null)
try {
fw.close();
} catch (IOException e) {


}
}
}

//从c盘读一个字符就往d盘写一个字符。
public static void copy1()throws IOException
{
//创建目的地
FileWriter fw = new FileWriter("demo1.txt");//要写到的文件
//与已有文件关联。
FileReader fr = new FileReader("demo2.java");//需要读取文件

int ch =0;
while ((ch = fr.read()) != -1)
{
fw.write(ch);
}
fw.close();
fr.close();
}
}

复制--读一个写一个---读完放到缓冲区,在写入目的地。

-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

0 0
原创粉丝点击