java文件操作输入输出

举报
王小王-123 发表于 2021/05/26 14:47:07 2021/05/26
【摘要】 目录 一、实验目的 二、实验代码 1.使用Java的输入、输出流将一个文本文件的内容按行读出,每读出一行就顺序添加行号,并写入到另一个文件中。 2.使用RandomAccessFile流将一个文本文件倒置读出。 3.请分别使用不带缓冲区和带缓冲区的字节流复制图片(或者音频或者视频)文件。 4.请分别使用不带缓冲区和带缓冲区的字符流复制文本文件。 每文一语 一...

目录

一、实验目的

二、实验代码

1.使用Java的输入、输出流将一个文本文件的内容按行读出,每读出一行就顺序添加行号,并写入到另一个文件中。

2.使用RandomAccessFile流将一个文本文件倒置读出。

3.请分别使用不带缓冲区和带缓冲区的字节流复制图片(或者音频或者视频)文件。

4.请分别使用不带缓冲区和带缓冲区的字符流复制文本文件。

每文一语


一、实验目的

1. 掌握输入输出流的总体结构;

2. 掌握流的概念;

3. 掌握FileInputStream类、FileOutputStream类、FileReader类、FileWriter类的构造方法、常用方法的使用;

4. 了解各种流(包括文件流、管道流、连接文件、过滤流、对象的序列化、随机访问)的使用。

二、实验代码

1.使用Java的输入、输出流将一个文本文件的内容按行读出,每读出一行就顺序添加行号,并写入到另一个文件中。


  
  1. package 作业练习.test4;
  2. import java.io.BufferedWriter;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.Scanner;
  6. import java.io.File;
  7. public class FileScanner {
  8. public static void main(String[] args) throws Exception{
  9. System.out.print("请输入文件名:");
  10. Scanner reader = new Scanner(System.in);
  11. String fileName = reader.nextLine();
  12. File f = new File("E:\\Intellij IDEL\\project\\src\\"+fileName);
  13. Scanner fi = new Scanner(f);
  14. //输出:
  15. String sLine = null;
  16. int index = 0;
  17. while(fi.hasNext()) {
  18. sLine = fi.nextLine();
  19. System.out.println(++index + " " + sLine);
  20. try {
  21. BufferedWriter out = new BufferedWriter(new FileWriter("test1.txt"));
  22. out.write(index + " " + sLine);
  23. } catch (IOException e) {
  24. }
  25. }
  26. System.out.println("文件创建成功!");
  27. }
  28. }

2.使用RandomAccessFile流将一个文本文件倒置读出。


  
  1. package 作业练习.test4;
  2. import java.io.*;
  3. public class test2 {
  4. public static void main(String []args) throws IOException
  5. {
  6. RandomAccessFile file =new RandomAccessFile("E:\\Intellij IDEL\\project\\src\\test4\\test.txt","r");
  7. long len =file.length();
  8. while(0!=len--)
  9. {
  10. file.seek(len);
  11. char ch =(char)file.read();
  12. System.out.print(ch);
  13. }
  14. file.close();
  15. }
  16. }

3.请分别使用不带缓冲区和带缓冲区的字节流复制图片(或者音频或者视频)文件。

要求:(1) 使用字节流FileInputStreamFileOutputStream实现复制;

(2) 在定义字节缓冲区大小时,可以尝试16字节、256字节、1024字节等不同大小的缓冲区进行复制。

(3) 请统计采用不同方式进行文件复制所花的时间,并进行分析。

 


  
  1. package 作业练习.test4;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. public class App14_3 {
  10. public static void main(String[] args) {
  11. File reader = new File("E:\\Intellij IDEL\\project\\src\\test4\\1.png");
  12. File writer = new File("\\Intellij IDEL\\project\\src\\test4\\2.png");
  13. FileInputStream fis = null;
  14. try {
  15. fis = new FileInputStream(reader);
  16. } catch (FileNotFoundException e1) {
  17. e1.printStackTrace();
  18. }
  19. BufferedInputStream bis = new BufferedInputStream(fis);
  20. FileOutputStream fos = null;
  21. try {
  22. fos = new FileOutputStream(writer);
  23. } catch (FileNotFoundException e) {
  24. e.printStackTrace();
  25. }
  26. BufferedOutputStream bos = new BufferedOutputStream(fos);
  27. byte[] b = new byte[256];
  28. int len = -1;
  29. try {
  30. while ((len = bis.read(b)) != -1) {
  31. bos.write(b, 0, len);
  32. bos.flush();
  33. }
  34. } catch (IOException e) {
  35. e.printStackTrace();
  36. } finally {
  37. try {
  38. bos.close();
  39. fos.close();
  40. bis.close();
  41. fis.close();
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47. }

  
  1. package 作业练习.test4;
  2. import java.io.*;
  3. public class test3 {
  4. public static void main(String []args) throws IOException
  5. {
  6. // 带缓冲区的字节流拷贝一个文本文件
  7. FileInputStream fin =new FileInputStream("E:\\Intellij IDEL\\project\\src\\test4\\test.txt");
  8. FileOutputStream fout =new FileOutputStream("E:\\Intellij IDEL\\project\\src\\test4\\test1.txt");
  9. byte buf[] =new byte[2014]; //创建字节数组,作为临时缓冲
  10. if(fin.read(buf)!=-1)
  11. {
  12. fout.write(buf);
  13. }
  14. System.out.println("文件复制成功");
  15. fin.close();
  16. fout.close();
  17. /*带缓冲区的字符流拷贝一个文本文件
  18. FileReader fin =new FileReader("E:\Intellij IDEL\project\src\test4\test2.txt");
  19. BufferedReader din=new BufferedReader(fin) ;
  20. FileWriter fou =new FileWriter("E:\Intellij IDEL\project\src\test4\test.txt");
  21. BufferedWriter dou =new BufferedWriter(fou);
  22. char c[]=new char[1024]; //创建字符数组
  23. din.read(c);
  24. fou.write(c);
  25. System.out.println("文件复制成功");
  26. din.close();
  27. fou.close();
  28. fin.close();
  29. dou.close();
  30. */
  31. }
  32. }

 

4.请分别使用不带缓冲区和带缓冲区的字符流复制文本文件。

要求:

(1) 使用字符流FileReaderFileWriter实现复制;

(2) 在定义字符缓冲区大小时,可以尝试16字符、256字符、1024字符等不同大小的缓冲区进行复制。


  
  1. package 作业练习.test4;
  2. import java.io.*;
  3. public class App14_5 {
  4. static App14_5 test=new App14_5();
  5. public static String openFile(String fileName){ //打开文件
  6. StringBuffer sb=null;
  7. FileInputStream fis=null;
  8. try {
  9. fis=new FileInputStream(fileName); ; //实例化输入流对象
  10. byte b[]=new byte[1024];
  11. int len;
  12. sb=new StringBuffer();
  13. while( (len = fis.read(b))!=-1 ){ //读文件并判断是否到达文件尾
  14. String str=new String(b,0,len);
  15. sb.append(str);
  16. }
  17. } catch (Exception e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. }finally{
  21. }
  22. return sb.toString();
  23. }
  24. public static boolean saveFile(String fileName,String content) throws IOException{
  25. boolean state=false;
  26. FileOutputStream fos=null;
  27. try {
  28. fos=new FileOutputStream(fileName); //实例化输出流对象
  29. //把content写入到文件中
  30. state=true;
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }finally {
  34. }
  35. return state;
  36. }
  37. public static boolean copyFile(String sourceFileName,String destinationFifleName){
  38. boolean sate =false;
  39. InputStream fis=null;
  40. OutputStream fos=null;
  41. try {
  42. fis=new FileInputStream(sourceFileName);
  43. fos=new FileOutputStream(destinationFifleName);
  44. int len;
  45. byte buffer[]=new byte[1024];
  46. //此处请填写多行
  47. len=fis.read(buffer);
  48. String str1=new String(buffer,0,len);
  49. byte[] b = str1.getBytes();
  50. fos.write(b);
  51. sate =true;
  52. } catch (Exception e) {
  53. // TODO Auto-generated catch block
  54. e.printStackTrace();
  55. }finally{
  56. try {
  57. if(fis!=null) fis.close();
  58. if(fos!=null) fos.close();
  59. } catch (IOException e) {
  60. // TODO Auto-generated catch block
  61. e.printStackTrace();
  62. }
  63. }
  64. return sate;
  65. }
  66. public static void main (String args[]) {
  67. App14_5 test=new App14_5();
  68. test.copyFile("E:\\Intellij IDEL\\project\\src\\test4\\test.txt",
  69. "E:\\Intellij IDEL\\project\\src\\test4\\test3.txt");
  70. }
  71. }
  72. }

每文一语

学会理性输入,感性输出,才会有一种好的循环!

本文幸运色是紫色哟!每一种思考都是一种深深的紫色回忆!

文章来源: wxw-123.blog.csdn.net,作者:王小王-123,版权归原作者所有,如需转载,请联系作者。

原文链接:wxw-123.blog.csdn.net/article/details/112939902

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。