---------------------- <a href="http://www.itheima.com"target="blank">Jsp.java+Android开发</a>、<a href="http://www.itheima.com"target="blank">Jsp.java+Android开发 </a>、期待与您交流! ----------------------
在变量、数组和对象中存储的数据是暂时存在的,程序结束以后他们就会丢失,为了能够永久的保存程序创建的数据,需要将其保存在磁盘中,这样就可以在其他程序中使用。Java的IO技术可以将数据存储在文本文件、二进制文件甚至是ZIP压缩文件中,以达到永久保存的目的。
流是一组有序的数据序列,根据操作的类型,可以分为输入流和输出流,IO流提供了一条通道程序,可以只用这条通道程序把源文件中的字节序列送达目的地。Java由数据流处理输入输出模式,程序从指向源的输入流中读取院中的数据。
Java语言定义了许多专门负责各种方式的输入输出,这些类都被放在java.io包中,其中,所有输入流类嗾使抽象类InputStream或Reader的子类,而所有输出流都是抽象类OutputStream或Writer的子类。
Java中的字符Unicode编码,是双字节的,InputStream是用来处理字节的,并不适合处理字符文本,java为字符文本的输入专门提供了一套单独的类Reader类并不是InputStream类的替换着,只是在处理字符串是简化了编程,Reader类是字符输入的抽象类,所有字符输入流的实现都是他的子类。
File类是java.io包中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的方法来操作文件,可以通过调用这些File类中的方法,实现创建、删除、重命名文件等操作。File类对象主要用来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件的读写权限等。数据可以将数据写入到文件中,文件也是数据流最常用的数据媒体。
file类的实践(老毕视频好激动)
import java.io.*;
class FileTest
{
// 创建类FileTest
public static void main(String[] args)
{ // 主方法
File file = new File("word.txt"); // 创建文件对象 可以写绝对路径,但是不灵活
if (file.exists())//判断
{
// 如果该文件存在
file.delete(); // 将文件删除
System.out.println("文件已删除"); // 输出的提示信息
} else
{
// 如果文件不存在
try
{
// try语句块捕捉可能出现的异常
file.createNewFile(); // 创建该文件
System.out.println("文件已创建"); // 输出的提示信息
} catch (Exception e)
{
// catch处理该异常
e.printStackTrace(); // 输出异常信息
}
}
}
}
获取文件的本身信息,常用的是获得当前文件下的word.txt文件的文件名、文件长度并判断该文件是都是隐藏文件。例如:
import java.io.*;
class FileTest
{
// 创建类
public static void main(String[] args)
{
File file = new File("word.txt"); // 创建文件对象
if (file.exists())
{
// 如果文件存在
String name = file.getName(); // 获取文件名称
long length = file.length(); // 获取文件长度
boolean hidden = file.isHidden(); // 判断文件是否是隐藏文件
System.out.println("文件名称:" + name); // 输出信息
System.out.println("文件长度是:" + length);
System.out.println("该文件是隐藏文件吗?" + hidden);
}
else
{
// 如果文件不存在
System.out.println("该文件不存在"); // 输出信息
}
}
}
文件的输入流、输出流以及带缓冲区的课堂笔记实例如下:
(1)-------------------------------------------------------------------------------------------------
/*
缓冲区的出现是为了提高流的操作效率,所以在创建缓冲区之前必须先有流对象
*/
import java.io.*;
class BufferedWriterDemo
{
public static void main(String[] args) throws IOException
{
//创建一个写入流对象
FileWriter fw=new FileWriter("buf.txt");
//为了提高字符写入流效率,加入了缓冲技术
//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw=new BufferedWriter(fw);//创建缓冲区
for(int x=1;x<5;x++)
{
bufw.write("abcde"+x);
bufw.newLine();//跨平台的换行符,必须用在缓冲区
bufw.flush();
}
//bufw.write("abcde");
//bufw.flush();
bufw.close();
//其实关闭缓冲区就是在关闭缓冲区中的流对象
//fw.close();
}
}
(2)-------------------------------------------------------------------------------------------------
/*
字符读取缓冲区
该缓冲区提供了一个一次读取一行的方法readLine(),方便了对文本数据的读取
*/
import java.io.*;
class BufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
//创建一个读取流对象和文件相关联
FileReader fr=new FileReader("buf.txt");//建立读取流对象
//为了提高效率,加入缓冲区技术,将字符读取流对象作为参数传递给缓冲区对象的构造函数
BufferedReader bufr=new BufferedReader(fr);//建立缓冲区
String line=null;
while((line=bufr.readLine())!=null)//判断是否达到文件的末尾,readLine()方法读取到文件末尾返回null
{
System.out.println(line);//打印读取的一行的信息
}
bufr.close();//缓冲区关闭
/*
String s1=bufr.readLine();//一次读取一行输出一行的操作
System.out.println("s1="+s1);
bufr.close();
*/
}
}
(3)-------------------------------------------------------------------------------------------------
/*
通过缓冲区复制一个.java文件
*/
import java.io.*;//导入io包
class CopyTestByBuf//创建CopyTestByBuf类
{
public static void main(String[] args) //主方法
{
BufferedReader bufr=null;//为了让每个代码块都能使用bufr,故定义在外边
BufferedWriter bufw=null;//为了让每个代码块都能使用bufw,故定义在外边
try
{
bufr=new BufferedReader(new FileReader("BufferedWriterDemo.java"));
//创建缓冲区,缓冲区中的流对象读取的对象是BufferedWriterDemo.java文件
bufw=new BufferedWriter(new FileWriter("bufWriter_cop.txt"));
//创建缓冲区,缓冲区中的流对象写入的对象是bufWriter_cop.txt文件
String line=null;
//判断是否达到文件的末尾,readLine()方法读取到文件末尾返回null
while((line=bufr.readLine())!=null)
{
bufw.write(line);//写入读取一行的内容
bufw.newLine();//换行
bufw.flush();//刷新缓冲区
}
}
catch (IOException e)//处理异常
{
throw new RuntimeException("读写失败 ");
}
finally//一定会执行的语句
{
try
{
if(bufr!=null)
bufr.close();
}
catch (IOException e)
{
throw new RuntimeException("读写关闭失败 ");
}
try
{
if(bufw!=null)
bufw.close();
}
catch (IOException e)
{
throw new RuntimeException("写入关闭失败 ");
}
}
}
}
(4)-------------------------------------------------------------------------------------------------
/*
需求:
通过键盘录入数据
当录入一行数据后,就将该行数据进行打印
如果录入的数据是over,那么停止录入。
*/
import java.io.*;
class ReadIn
{
public static void main(String[] args) throws IOException
{
InputStream in=System.in;
StringBuilder sb=new StringBuilder();
while(true)
{
int ch=in.read();
if(ch=='\r')
continue;
if(ch=='\n')
{
String s=sb.toString();
if("over".equals(s))
break;
System.out.println(s.toUpperCase());
sb.delete(0,sb.length());
}
else
sb.append((char)ch);
}
}
}
/*
通过上边的键盘录入一行数据打印出其大写,发现其实就是在进行一行代码的读取
即readLine方法,然而readLine方法是字符流BufferedReader类中的方法,而键盘
录入的read方法是字节流的方法,可以通过转换流的方法来实现
*/
import java.io.*;
class TransStreamDemo
{
public static void main(String[] args)throws IOException
{
//获取键盘录入对象
InputStream in=System.in;
//将字节流对象转换成字符流对象,使用转换流,InputStreamReader
InputStreamReader isr=new InputStreamReader(in);
//为了提高效率,将字符串进行缓冲区技术高效操作,使用BufferedReader
BufferedReader bufr=new BufferedReader(isr);
String line=null;
while((line=bufr.readLine())!=null)
{
System.out.println(line.toUpperCase());
}
bufr.close();
}
}
---------------------- <a href="http://www.itheima.com"target="blank">Jsp.java+Android开发</a>、<a href="http://www.itheima.com"target="blank">Jsp.java+Android开发培训</a>、期待与您交流! ----------------------