java输入与输出实验_实验四 java输入输出处理

目录

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

2.掌握流的概念;

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

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

二、实验代码

1.使用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");

}

}

}

每文一语

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

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值