package caokangnsd;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.SequenceInputStream;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Scanner;
public class FileAndStream {
public static void main(String[] args) throws IOException, ClassNotFoundException {
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*
* File类只用作创建和删除非多重目录的文件
*/
File file1 = new File("./src/main/java/fanchuanqi/file1.txt");
file1.createNewFile();// OK--delete
File file2 = new File("./src/main/java/fanchuanqi/a/b");// 重新创建同名的a也不会覆盖
file2.mkdir();// a/b,c
File file3 = new File("./src/main/java/fanchuanqi/f1.txt");
file1.renameTo(file3);// rename//OK//f1.txt
System.out.println(file3.isFile());
System.out.println(file2.isDirectory());
System.out.println(file1.exists());
System.out.println(file2.canRead());
System.out.println(file2.canWrite());
file1.createNewFile();// 重新 创建file1
file1.delete();// OK
File file4 = new File("./src/main/java/fanchuanqi/a");
//
File[] files = file4.listFiles(new FileFilter() {// 文件列表的选择器FileFilter
public boolean accept(File pathname) {
// TODO Auto-generated method stub
return pathname != null;
}
});
System.out.println(Arrays.toString(files));
----------------------------------------------------------------------------------------------
/*
* RandomAccessFile类用来访问修改文件,两种读写模式r,rw
*/
// 首先访问文件,若 文件不存在则 创建文件
RandomAccessFile raf = new RandomAccessFile("./src/main/java/fanchuanqi/f2.txt", "rw");
raf.write(50);//
raf.write('a');//
long a = raf.getFilePointer();// 2
System.out.println(a);
raf.seek(4);
String str = "haha\nheihei\nhehe\nOK";
raf.write(str.getBytes("utf-8"));//
raf.write(raf.read());// 读取一个写入
raf.seek(0);
System.out.println(raf.readChar());
byte[] bs = new byte[10 * 1024];// 10kb
int len = raf.read(bs);
System.out.println(new String(bs, 0, len));//
raf.close();
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*
* InputStream输入流 OutputStream输出流 节点流: 处理流:封装拓展低级流
* FileInputStream,FileOutputStream,演示读写文件
*/
FileInputStream fis = new FileInputStream("./src/main/java/fanchuanqi/支柱歌词.txt");
FileOutputStream fos = new FileOutputStream("./src/main/java/fanchuanqi/f3.txt",true);
byte[] bs2 = new byte[1000];
int len2 = 0;
while ((len2 = fis.read(bs2)) != -1) {
fos.write(bs2, 0, len2);
}
fos.close();
fis.close();
----------------------------------------------------------------------------------------------
/*
* BufferedInputStream BufferedOutputStream 自动缓存约8kb的内容,要基于低级流使用
* flush
*/
/* Transient修饰的属性可以免除序列化
* 对象流的使用ObjectInputStream,ObjectOutputStream
*/
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("./src/main/java/fanchuanqi/person.obj"));
Person p = new Person("ck", 12, "nan");
oos.writeObject(p);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("./src/main/java/fanchuanqi/person.obj"));
Object o = ois.readObject();
Person p2 = (Person) o;
System.out.println(p2.toString());
----------------------------------------------------------------------------------------------
/*
* 转换流//字符流和字节流的转换可以在这里 更改字符集 InputStreamReader(InputStream is,"utf-8");
* OutputStreamWriter
*/
/*
* 字符流 主要用于使用字符流里的方法用来读取字符串 BufferedReader,BufferedWriter PrintWriter
* 其中PrintWriter包括了字节流和转换流 举例
*/
FileOutputStream fos2 = new FileOutputStream("./src/main/java/fanchuanqi/f4.txt");
InputStreamReader isr = new InputStreamReader(new FileInputStream("./src/main/java/fanchuanqi/f3.txt"), "GBK");
BufferedReader br = new BufferedReader(isr);
OutputStreamWriter osw = new OutputStreamWriter(fos2, "GBK");
PrintWriter pw = new PrintWriter(osw, true);// 自动行刷新
String str1;
while ((str1 = br.readLine()) != null) {
pw.println(str1);
}
pw.close();
br.close();
System.out.println("OK");
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*
* 管道流PipedOutputStream,PipedInputStream用于线程之间的通信
*/
Send send=new Send();
Accept accept=new Accept();
send.getPos().connect(accept.getPis());
send.start();
accept.start();
----------------------------------------------------------------------------------------------
/*
* Scanner类
*/
Scanner scan=new Scanner(System.in);
String s=scan.nextLine();
System.out.println(s);
Scanner scann=new Scanner(new File("./src/main/java/fanchuanqi/f1.txt"));
if(scann.hasNextLine()) {
System.out.println(scann.nextLine());
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*
* 合并流
*/
SequenceInputStream sis =
new SequenceInputStream(new FileInputStream("aa"), new FileInputStream("bb"));
}
}
class Send extends Thread {
PipedOutputStream pos= new PipedOutputStream();
public void run() {
String str = "hahaha";
try {
pos.write(str.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public PipedOutputStream getPos() {
return pos;
}
}
class Accept extends Thread {
PipedInputStream pis=new PipedInputStream();
public void run() {
byte[] bs=new byte[100];
try {
int len=pis.read(bs);
String str=new String(bs,0,len,"utf-8");
System.out.println(str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public PipedInputStream getPis() {
return pis;
}
}