文件操作类
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();
}
}