一、实验目的

  • 1. 掌握输入输出流的总体结构;
  • 2. 掌握流的概念;
  • 3. 掌握FileInputStream类、FileOutputStream类、FileReader类、FileWriter类的构造方法、常用方法的使用;
  • 4. 了解各种流(包括文件流、管道流、连接文件、过滤流、对象的序列化、随机访问)的使用。

二、实验代码

1.使用Java的输入输出

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

package 作业练习.test4;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import java.io.File;
public class FileScanner {
public static void main(String[] args) throws Exception{
System.out.print("请输入文件名:");
Scanner reader = new Scanner(System.in);
String fileName = reader.nextLine();
File f = new File("E:\\Intellij IDEL\\project\\src\\" fileName);
Scanner fi = new Scanner(f);
//输出:
String sLine = null;
int index = 0;
while(fi.hasNext()) {
sLine = fi.nextLine();
System.out.println(  index   " "   sLine);
try {
BufferedWriter out = new BufferedWriter(new FileWriter("test1.txt"));
out.write(index   " "   sLine);
} catch (IOException e) {
}
}
System.out.println("文件创建成功!");
}
}

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

package 作业练习.test4;
import java.io.*;
public class test2 {
public static void main(String []args) throws IOException
{
RandomAccessFile file =new RandomAccessFile("E:\\Intellij IDEL\\project\\src\\test4\\test.txt","r");
long len =file.length();
while(0!=len--)
{
file.seek(len);
char ch =(char)file.read();
System.out.print(ch);
}
file.close();
}
}

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

要求:

  • (1) 使用字节流FileInputStream、FileOutputStream实现复制;
  • (2) 在定义字节缓冲区大小时,可以尝试16字节、256字节、1024字节等不同大小的缓冲区进行复制。
  • (3) 请统计采用不同方式进行文件复制所花的时间,并进行分析。
package 作业练习.test4;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class App14_3 {
public static void main(String[] args) {
File reader = new File("E:\\Intellij IDEL\\project\\src\\test4\\1.png");
File writer = new File("\\Intellij IDEL\\project\\src\\test4\\2.png");
FileInputStream fis = null;
try {
fis = new FileInputStream(reader);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(writer);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte[] b = new byte[256];
int len = -1;
try {
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
bos.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bos.close();
fos.close();
bis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package 作业练习.test4;
import java.io.*;
public class test3 {
public static void main(String []args) throws IOException
{
// 带缓冲区的字节流拷贝一个文本文件
FileInputStream fin =new FileInputStream("E:\\Intellij IDEL\\project\\src\\test4\\test.txt");
FileOutputStream fout =new FileOutputStream("E:\\Intellij IDEL\\project\\src\\test4\\test1.txt");
byte buf[] =new byte[2014]; //创建字节数组,作为临时缓冲
if(fin.read(buf)!=-1)
{
fout.write(buf);
}
System.out.println("文件复制成功");
fin.close();
fout.close();
/*带缓冲区的字符流拷贝一个文本文件
FileReader fin =new FileReader("E:\Intellij IDEL\project\src\test4\test2.txt");
BufferedReader din=new BufferedReader(fin) ;
FileWriter fou =new FileWriter("E:\Intellij IDEL\project\src\test4\test.txt");
BufferedWriter dou =new BufferedWriter(fou);
char c[]=new char[1024]; //创建字符数组
din.read(c);
fou.write(c);
System.out.println("文件复制成功");
din.close();
fou.close();
fin.close();
dou.close();
*/
}
}

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

要求:

  • (1) 使用字符流FileReader、FileWriter实现复制;
  • (2) 在定义字符缓冲区大小时,可以尝试16字符、256字符、1024字符等不同大小的缓冲区进行复制。
package 作业练习.test4;
import java.io.*;
public class App14_5 {
static App14_5 test=new App14_5();
public static String openFile(String fileName){ //打开文件
StringBuffer sb=null;
FileInputStream fis=null;
try {
fis=new FileInputStream(fileName); ; //实例化输入流对象
byte b[]=new byte[1024];
int len;
sb=new StringBuffer();
while( (len = fis.read(b))!=-1 ){ //读文件并判断是否到达文件尾
String str=new String(b,0,len);
sb.append(str);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
}
return sb.toString();
}
public static boolean saveFile(String fileName,String content) throws IOException{
boolean state=false;
FileOutputStream fos=null;
try {
fos=new FileOutputStream(fileName); //实例化输出流对象
//把content写入到文件中
state=true;
} catch (Exception e) {
e.printStackTrace();
}finally {
}
return state;
}
public static boolean copyFile(String sourceFileName,String destinationFifleName){
boolean sate =false;
InputStream fis=null;
OutputStream fos=null;
try {
fis=new FileInputStream(sourceFileName);
fos=new FileOutputStream(destinationFifleName);
int len;
byte buffer[]=new byte[1024];
//此处请填写多行
len=fis.read(buffer);
String str1=new String(buffer,0,len);
byte[] b = str1.getBytes();
fos.write(b);
sate =true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fis!=null) fis.close();
if(fos!=null) fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sate;
}
public static void main (String args[]) {
App14_5 test=new App14_5();
test.copyFile("E:\\Intellij IDEL\\project\\src\\test4\\test.txt",
"E:\\Intellij IDEL\\project\\src\\test4\\test3.txt");
}
}
}

到此这篇关于java文件操作输入输出详解的文章就介绍到这了,更多相关java文件输入输出内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

java文件操作输入输出结构详解的更多相关文章

  1. PHP实现文件安全下载

    例如你希望客户要填完一份表格,才可以下载某一文件,你第一个想法一定是用"Redirect"的方法,先检查表格是否已经填写完毕和完整,然后就将网址指到该文件,这样客户才能下载,但如果你想做一个关于"网上购物"的电子商务网站,考虑安全问题,你不想用户直接复制网址下载该文件,笔者建议你使用PHP直接读取该实际文件然后下载的方法去做。feof){echofread;}fclose;}这样就可以用PHP直接输出文件了。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  4. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  5. node下使用UglifyJS压缩合并JS文件的方法

    下面小编就为大家分享一篇node下使用UglifyJS压缩合并JS文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  6. Java实现世界上最快的排序算法Timsort的示例代码

    Timsort 是一个混合、稳定的排序算法,简单来说就是归并排序和二分插入排序算法的混合体,号称世界上最好的排序算法。本文将详解Timsort算法是定义与实现,需要的可以参考一下

  7. Node的文件系统你了解多少

    这篇文章主要为大家详细介绍了Node的文件系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  8. Java日期工具类的封装详解

    在日常的开发中,我们难免会对日期格式化,对日期进行计算,对日期进行校验,为了避免重复写这些琐碎的逻辑,我这里封装了一个日期工具类,方便以后使用,直接复制代码到项目中即可使用,需要的可以参考一下

  9. Java设计模式之模板方法模式Template Method Pattern详解

    在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角——模板方法模式

  10. Java 中 Class Path 和 Package的使用详解

    这篇文章主要介绍了Java 中 Class Path和Package的使用详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部