java IO

文件操作类

package cn.a.file;

import java.io.File;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
//File类操作的是文件本身,而不是文件的内容
public class TestDemoA {
	public static void main(String[] args) throws Exception {
		/*//1 文件的基本操作
		File file = new File("f:" + File.separator + "text.txt");//设置传递文件的路径
		if (file.exists()) {
			file.delete();//判断此路径是否存在,存在就删了他
		} else {
			System.out.println(file.createNewFile());//不存在就创建新文件
		}*/
		
		/*//2 创建带路径的文件
		File file = new File("f:" + File.separator + "Demo" + File.separator 
				+ "Msdn" + File.separator + "a.txt");//路径分隔符separator
		if (!(file.getParentFile().exists())) {
			file.getParentFile().mkdirs();//如果取得当前路径的父路径不存在,就创建它的多级目录
		}
		System.out.println(file.createNewFile());*/
		
		/*//3 设置文件或目录的信息
		File file = new File("f:" + File.separator + "Picture");
		if (file.exists()) {
			System.out.println("判断是否为文件" + (file.isFile()));
			System.out.println("判断是否为目录" + (file.isDirectory()));
		}
		//文件大小考虑到小数,故用BigDecimal类
		System.out.println("文件大小" + new BigDecimal((double)file.length() / 1024 / 1024).divide
				(new BigDecimal(1), 2, BigDecimal.ROUND_HALF_UP) + "M");
		System.out.println("上次修改的时间" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
				.format(new Date(file.lastModified())));*/
		
		/*//4 列出目录信息
		File file = new File("f:" + File.separator);
		if (file.isDirectory()) {
			File result[] = file.listFiles();
			for (int x = 0; x < result.length; x++) {
				System.out.println(result[x]);
			}
		}*/
		
		/*//列出目录子目录的全部内容
		File file = new File("f:" + File.separator);
		print(file);
		
	}
	
	public static void print(File file) {
		if (file.isDirectory()) {
			File result[] = file.listFiles();
			if (result != null) {
				for (int x = 0; x < result.length; x++) {
					print(result[x]);//递归
				}
			}
		}
		System.out.println(file);*/
	}

}

字节流与字符流

package cn.a.stream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;

public class TestDemoB {
	public static void main(String[] args) throws Exception {
		/*//1 outStream(字节输出流) 文件内容的输出
		//定义需要操作的文件路径
		File file = new File("f:" + File.separator + "Demo" + File.separator
				+ "Msdn" + File.separator + "a.txt");
		//创建文件目录,目录不存在文件不能输出
		if (!file.getParentFile().mkdirs()) {
			file.getParentFile().mkdirs();
		}
		//用子类实例化字节输出流对象,进行内容输出操作
		OutputStream out = new FileOutputStream(file);
		//OutputStream out = new FileOutputStream(file,ture);//每执行一次的追加输出操作
		String str = "Hello World";
		byte data[] = str.getBytes();
		//out.write(data);//输出整个数组
		/*for (int x = 0; x < data.length; x++) {
			out.write(data[x]);
		}//依次输出单个字符
		out.write(data, 2, 3);//输出指定字符内容
		out.close();//资源操作,需要关闭 */
		
		//2 IntputStream(字节输入流) 文件字节数据的读取
			//将数据一次性读入字节数组
		/*File file = new File("f:" + File.separator + "Demo" + File.separator
				+ "Msdn" + File.separator + "a.txt");
		if (file.exists()) {
			InputStream input = new FileInputStream(file);
			byte data[] = new byte[1024];
			int ten = input.read(data);//进行数据读取,将内容保存在字节数组中
			input.close();
			System.out.println(new String(data,0,ten));
		}*/
		
		/*//将数据读入一个个字节数据
		File file = new File("f:" + File.separator + "Demo" + File.separator
				+ "Msdn" + File.separator + "a.txt");
		if (file.exists()) {
			InputStream input = new FileInputStream(file);
			byte data[] = new byte[1024];
			int foot = 0;//设置字节数组操作角标
			int temp = 0;//接收每次读取的数据
			while ((temp = input.read()) != -1) {
				data[foot++] = (byte) temp;
			}
			input.close();
			System.out.println(new String(data,0,foot));
		}*/
		
		/*//3 Writer(字符输出流)
		//定义需要操作的文件路径
		File file = new File("f:" + File.separator + "Demo" + File.separator
				+ "Msdn" + File.separator + "a.txt");
		//创建文件目录,目录不存在文件不能输出
		if (!file.getParentFile().mkdirs()) {
			file.getParentFile().mkdirs();
		}
		Writer out = new FileWriter(file);
		String str = "AAAAAAAA";
		out.write(str);
		out.close();*/
		
		//4 Reader(字符输入流)
		File file = new File("f:" + File.separator + "Demo" + File.separator
				+ "Msdn" + File.separator + "a.txt");
		if (file.exists()) {
			Reader in = new FileReader(file);
			char data[] = new char[1024];
			int ten = in.read(data);//进行数据读取,将内容保存在字符数组中
			in.close();
			System.out.println(new String(data,0,ten));
		}
	}
}

转换流

通过继承结构发现,FileWrite和FileReader都是转换流InputStreamReader,
OutputStreamWrite的子类,
证明了所有要读取的文件数据都是字节数据,所有的字符都是内存处理形成的
public class InputStreamReader extends Reader
public InputStreamReader(InputStream in)
public class OutputStreamWriter extends Writer
public OutputStreamWriter(OutputStrean out)

案例:文件复制

package cn.a.copy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class TestDemoC {

	public static void main(String[] args) throws Exception {
		long start = System.currentTimeMillis();
		if (args.length != 2) {
			System.out.println("初始化参数配置错误,命令执行错误");
			System.exit(1);//程序退出执行
		}
		File inFile = new File(args[0]);//源文件路径
		if (!inFile.exists()) {
			System.out.println("源文件不存在");
			System.exit(1);
		}
		File outFile = new File(args[1]);//目标文件路径
		if (!outFile.getParentFile().exists()) {
			outFile.getParentFile().mkdirs();
		}
		InputStream input = new FileInputStream(inFile);
		OutputStream out = new FileOutputStream(outFile);
		int temp = 0;//临时存储读入的一段数据的长度
		byte data[] = new byte[1024];//定义空间存储一次性读入的数据
		while ((temp = input.read(data)) != -1) {
			out.write(data, 0, temp);//每次读多少每次写多少
		}
		input.close();
		out.close();
		long end = System.currentTimeMillis();
		System.out.println("所花费的时间" + (end-start));
	}

}

内存流

package cn.a.bytearray;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class TestMemory {

	public static void main(String[] args) throws Exception {
		/*//字节内存流处理小写转大写字母的操作
		String str = "www.xsa.com & www.dad.cn";
		InputStream input = new ByteArrayInputStream(str.getBytes());
		OutputStream out = new ByteArrayOutputStream();
		int temp = 0;
		while ((temp = input.read()) != -1) {
			out.write(Character.toUpperCase(temp));
		}
		System.out.println(out);
		input.close();
		out.close();*/
		
		//通过内存输出流中的方法取得全部数据public byte[] toByteArray
		File fileA = new File("f:" + File.separator + "a.txt");
		File fileB = new File("f:" + File.separator + "b.txt");
		InputStream inputA = new FileInputStream(fileA);
		InputStream inputB = new FileInputStream(fileB);
		ByteArrayOutputStream out = new ByteArrayOutputStream();//字节内存输出流
		int temp = 0;
		while((temp = inputA.read()) != -1) {
			out.write(temp);
		}
		while((temp = inputB.read()) != -1) {
			out.write(temp);
		}
		byte data[] = out.toByteArray();//将所有内容保存在内存输出流中,实现多个文件合并读取
		inputA.close();
		inputB.close();
		out.close();
		System.out.println(new String(data));
	}

}

打印流

package cn.a.printstream;

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;


public class TestDemoD {

	public static void main(String[] args) throws Exception {
		/*PrintStream out = new PrintStream(new FileOutputStream(new File("f:" + File.separator
				+ "a.txt")));
		out.print('a');//字节打印流输出public PrintStream(OutPutStrean out);
		out.print(1);
		out.println("asadd");
		out.close();*/
		
		//PrintStream类的改进 格式化输出
		String name = "南瓜蛋";
		int age = 1;
		double score = 97.5;
		PrintStream out = new PrintStream(new FileOutputStream(new File("f:" + File.separator
		+ "a.txt")));
		out.printf("姓名: %s, 年龄: %d, 成绩: %3.1f",name,age,score);
	}

}

system对IO的支持

package cn.a.system;

import java.io.InputStream;
import java.io.OutputStream;



public class TestDemoE {

	public static void main(String[] args) throws Exception {
		/*//错误输出System.err
		try {
			Integer.parseInt("adc");
		} catch (Exception e) {
			System.err.println(e);
		}*/
		
		/*//信息输出System.out
		OutputStream out = System.out;
		out.write("wwwww".getBytes());*/
		
		//系统输入
		InputStream input = System.in;
		StringBuffer buf = new StringBuffer();
		System.out.println("请输入数据:");
		int temp = 0;
		while ((temp = input.read()) != -1) {
			if (temp == '\n') {
				break;
			}
			buf.append((char)temp);
		}
		System.out.println("输入的数据为:" + buf);
	}

}

字符缓冲流

package cn.a.bufferedreader;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class TestDemoF {

	public static void main(String[] args) throws Exception {
		//字节缓冲流,处理中文字符的问题
		BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
		System.out.println("请输入数据:");
		String str = buf.readLine();
		System.out.println("输出的内容:" + str);
	}

}

扫描流

package cn.a.scanner;

import java.util.Scanner;

public class TestDemoF {

	public static void main(String[] args) throws Exception {
		//Scanner扫描流public Scanner(InputStream sourcr)
		//public boolean hasNextXXX() 判断是否有指定类型输出
		//public 数据类型 nextXXX() 输出指定类型
		Scanner scan = new Scanner(System.in);
		System.out.print("请输入数据:");
		if (scan.hasNext()) {
			System.out.println("输出的内容:" + scan.next());
		}
		scan.close();
	}

}

对象序列化

package cn.a.serializable;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Book implements Serializable {
	private String title;
	private double price;
	public Book(String title, double price) {
		super();
		this.title = title;
		this.price = price;
	}
	@Override
	public String toString() {
		return "Book [title=" + title + ", price=" + price + "]";
	}
}

public class TestDemoF {

	public static void main(String[] args) throws Exception {
		
		ser();
	}
	/*
	public static void ser() throws Exception {
		//实行序列化操作ObjectOutputStream 对象进行二进制转换
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
				new File("f:" + File.separator + "book.er") ));
		oos.writeObject(new Book("aaa",9.8));
		oos.close();
	}*/
	
	public static void ser() throws Exception {
		//实行反向序列化操作ObjectIutputStream 二进制转换为对象
		ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
				new File("f:" + File.separator + "book.er") ));
		Object obj = ois.readObject();
		Book book = (Book) obj;
		System.out.println(book);
		ois.close();
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值