学习JAVA第八课:JavaIO操作

1、IO:输入输出
  • 输入设备:键盘、鼠标…
  • 输出设备:显示器、打印机…
  • 划分标准:站在内存角度
  • 硬盘既是输入设备(可以从硬盘读取文件),又是输出设备(将内容保存到文件)
    -最常见的输入输出是:文件输入输出
  • 重点:文件输入(读文件)输出(写文件)
2、Java输入输出功能集中在java.io包
  • 文件操作
  • 文件读
  • 文件写
3、文件操作:java.io.File类
  • 查询文件、删除文件、重命名、创建文件夹
  • 复制、移动文件等功能不涉及
import java.io.*;
class Test{	
	public static void main (String[] args) {
		File f = new File("d:/111");
		f.delete();
	}
}
import java.io.*;
class Test{	
	public static void main (String[] args) {
		File f = new File("C:/Windows");
		File[] files = f.listFiles();
		for(File file : files){
			System.out.println(file.getName());
		}
	}
}
4、文件读

案例:某文件中有一段字符串,请将其读入内存后显示

  • java.io.FileInputStream : 字节流,对中文乱码支持不好
  • java.io.FileReader:字符流,支持多字节字符
  • java.io.BufferedReader:缓冲读,支持字符按行读

例子:文档text.txt里面有一段话,要求读入之后在屏幕上显示

import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		File f = new File("d:/test.txt");
		FileInputStream fis = new FileInputStream(f);
		byte[] data = new byte[(int)f.length()];
		fis.read(data);
		String str = new String(data);
		System.out.println(str);
		
		fis.close();
		}
}
import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		File f = new File("d:/test.txt");
		FileInputStream fis = new FileInputStream(f);
		while(true){
			int i = fis.read();//适合读取
			if(i==-1)  break;
			System.out.print((char)i);	
		}		
		fis.close();
		}
}
FileInputStream
read字节数组:适合读字符串
read字节+循环:适合读取字符
为了解决此问题,java推出了FileReader解决了FileInputStream双字节读取的问题
import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		File f = new File("d:/test.txt");
		FileReader fis = new FileReader(f);
		while(true){
			int i = fis.read();
			if(i==-1)  break;
			System.out.print((char)i);	
		}
		fis.close();
		}
}
针对字符串,还可以按行读取,适合读取“一行一行的文档”
import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		File f = new File("d:/test.txt");
		FileReader fr = new FileReader(f);
		BufferedReader br = new BufferedReader(fr);
		while(true){
			String str = br.readLine();
			if(str==null)  break;
			System.out.println(str);
		}
		fr.close();
		}
}
5、文件写

案例:字符串“中南大学CSU”,请将其保存到文件

  • java.io.FileOutputStream : 字节流,对中文乱码支持不好
  • java.io.FileWriter:字符流,支持多字节字符(使用少)
  • java.io.PrintStream:支持丰富的格式写
import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		File f = new File("d:/test.txt");
		FileOutputStream fos = new FileOutputStream(f,true);
		String str = "中南大学CSU";
		byte[] data = str.getBytes();
		fos.write(data);
		fos.close();
		}
}
write函数写入一个字节数组:适合字符
write函数写入一个个字节:适合字节流
write函数写入一个个字节,也不适合双字节字符,java推出了FileWriter,但是极少使用
import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		File f = new File("d:/test.txt");
		PrintStream ps = new PrintStream(f);
		for(int i=1;i<=9;i++){
			for(int j=1;j<=i;j++){
				ps.print(i + "*" + j + "=" + i*j + " ");
			}
			ps.println();
		}
		
		ps.close();
		}
}
写字符:printStream类
 案例:将一个99乘法表存入文件test.txt
import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		File f = new File("d:/test.txt");
		PrintStream ps = new PrintStream(f);
		for(int i=1;i<=9;i++){
			for(int j=1;j<=i;j++){
				ps.print(i + "*" + j + "=" + i*j + " ");
			}
			ps.println();
		}
		
		ps.close();
		}
}

综合案例:

1、将字符文件用凯撒加密法加密(每个字节数字+3)China->Fklqd


import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		FileInputStream fis = new FileInputStream("1.txt");
		FileOutputStream fos = new FileOutputStream("1加密.txt");
		while(true){
			int i = fis.read();
			if(i==-1)  break;
			fos.write(i+3);
		}
		
		fos.close();
		fis.close();
		}
}

import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		FileInputStream fis = new FileInputStream("1加密.txt");
		FileOutputStream fos = new FileOutputStream("1解密.txt");
		while(true){
			int i = fis.read();
			if(i==-1)  break;
			fos.write(i-3);
		}
		
		fos.close();
		fis.close();
		}
}

2、将图片文件用凯撒加密法加密

import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		FileInputStream fis = new FileInputStream("img.jpg");
		FileOutputStream fos = new FileOutputStream("img加密.jpg");
		while(true){
			int i = fis.read();
			if(i==-1)  break;
			fos.write(i+3);
		}
		
		fos.close();
		fis.close();
		}
}

import java.io.*;
class Test{	
	public static void main (String[] args) throws Exception{
		FileInputStream fis = new FileInputStream("img加密.jpg");
		FileOutputStream fos = new FileOutputStream("img解密.jpg");
		while(true){
			int i = fis.read();
			if(i==-1)  break;
			fos.write(i-3);
		}
		
		fos.close();
		fis.close();
		}
}

最后讲解一个类:java.io.RandomAccessFile
public void seek(long pos)最重要
RandomAccessFile适合读写大型的文件
例如:文件分块拷贝、下载的场合
不太适合流文件(读写文本)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值