您的位置:首页 > 编程语言 > Java开发

java IO流基础总结二

2019-08-04 14:53 274 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_37967203/article/details/98469552

在之前的博客中只是介绍了一些IO流中的基础知识和四个最简单的例子。本篇博客将继续用几个例子来深入研究IO流。

文件的拷贝:本例演示了将I:/eclipse workpace/IO流/a.txt拷贝到I:/eclipse workpace/IO流/copy.txt。

public class FileCopy {

public static void main(String[] args) {
// TODO Auto-generated method stub
copy("I:/eclipse workpace/IO流/a.txt","I:/eclipse workpace/IO流/copy.txt");

}

public static void copy(String src,String dest)
{
File srcFile = new File(src);
File destFile = new File(dest);

InputStream is = null;
OutputStream os = null;

try {
is = new FileInputStream(srcFile);
//分段读取
byte[] flush = new byte[1024];
int len = -1;//接收长度
os = new FileOutputStream(destFile);
while((len=is.read(flush)) != -1)
{
os.write(flush,0,len);
}
os.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {

try {
if (null != os) {
os.close();
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (null != is)
is.close();
}
catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}

}
}

}

转换流: InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流。比如,如下场景:

System.in是字节流对象,代表键盘的输入,如果我们想按行接收用户的输入时,就必须用到缓冲字符流BufferedReader特有的方法readLine(),但是经过观察会发现在创建BufferedReader的构造方法的参数必须是一个Reader对象,这时候我们的转换流InputStreamReader就派上用场了。

而System.out也是字节流对象,代表输出到显示器,按行读取用户的输入后,并且要将读取的一行字符串直接显示到控制台,就需要用到字符流的write(String str)方法,所以我们要使用OutputStreamWriter将字节流转化为字符流。

public class ConvertTest {

public static void main(String[] args) {
// TODO Auto-generated method stub

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));

String mString ="";
while(mString !="exit")
{
try {
mString = reader.readLine();
writer.write(mString);
writer.newLine();
writer.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}a

}

}

}

Apache IOUtils和FileUtils类库为我们提供了更加简单、功能更加强大的文件操作和IO流操作功能。打开FileUtils的api文档,我们抽出一些工作中比较常用的方法,进行总结和讲解。总结如下:

  1. cleanDirectory:清空目录,但不删除目录。

  2. contentEquals:比较两个文件的内容是否相同。

  3. copyDirectory:将一个目录内容拷贝到另一个目录。可以通过FileFilter过滤需要拷贝的 文件。

  4. copyFile:将一个文件拷贝到一个新的地址。

  5. copyFileToDirectory:将一个文件拷贝到某个目录下。

  6. copyInputStreamToFile:将一个输入流中的内容拷贝到某个文件。

  7. deleteDirectory:删除目录。

  8. deleteQuietly:删除文件。

  9. listFiles:列出指定目录下的所有文件。

  10. openInputSteam:打开指定文件的输入流。

  11. readFileToString:将文件内容作为字符串返回。

  12. readLines:将文件内容按行返回到一个字符串数组中。

  13. size:返回文件或目录的大小。

  14. write:将字符串内容直接写到文件中。

  15. writeByteArrayToFile:将字节数组内容写到文件中。

  16. writeLines:将容器中的元素的toString方法返回的内容依次写入文件中。

  17. writeStringToFile:将字符串内容写到文件中。

虽然FileUtils提供了这么多方法,让IO流操作变得更加简单,但是我们仍然需要理解IO流的知识,掌握常用的类和方法。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: