File类
用于对磁盘上的文件或目录进行操作
直接父类是Object
创建一个文件
|
public class FileTest { public static void main(String[] args) throws IOException { File file = new File("C:/text.txt");
System.out.println(file.createNewFile()); } } |
在一个目录下创建文件
|
public class FileTest2 { public static void main(String[] args) throws IOException { File file = new File("C:/abc");
File file2 = new File(file,"hello.txt");
System.out.println(file2.createNewFile());
File file3 = new File(file,"xyz/world.txt");
System.out.println(file3.createNewFile()); } } |
创建目录操作
|
public class FileTest3 { public static void main(String[] args) { File file = new File("C:/abc/xyz/hello");
System.out.println(file.mkdirs());
System.out.println(file.isDirectory()); } } |
列出指定目录下的文件或目录
|
public class FileTest4 { public static void main(String[] args) { File file = new File("C:/java");
String[] names = file.list();
for(String name: names) { System.out.println(name); }
File[] files = file.listFiles();
for(File f : files) { System.out.println(f.getName()); System.out.println(f.getParent()); } } } |
文件删除操作
|
public class FileTest5 { public static void main(String[] args) throws IOException { File file = new File("C:/abc/xyz/hello/text.txt");
//file.createNewFile();
boolean delete = file.delete();
System.out.println(delete); } } |
文件名过滤操作
|
public class FileTest6 { public static void main(String[] args) { File file = new File("C:/java");
/*String[] names = file.list();
for(String name : names) { if(name.endsWith(".java")) { System.out.println(name); } }*/
String[] names = file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { if(name.endsWith(".java")) { return true; } return false; } });
for(String name : names ) { System.out.println(name); } } } |
文件分隔符的使用
|
public class FileTest7 { public static void main(String[] args) throws IOException { //不加盘符表示java安装的默认盘 File file = new File(File.separator + "helo.txt");
System.out.println(file.createNewFile()); } } |
递归的使用(关键在于要先指定一个出口,才不会出现死循环)
|
public class Test1 { public static int calc(int num) { if(num ==1 ) return 1; else return num * calc(num - 1); } public static void main(String[] args) { System.out.println(calc(5)); } } |
斐波那契数列
|
public class Fabonaci { public int calc(int pos) { if(1 == pos || 2 == pos) return 1; else return calc(pos-1)+calc(pos-2); }
private void sysout() { Fabonaci fab = new Fabonaci(); fab.calc(30); } } |
删除指定目录下的所有文件(用递归实现)
|
public class FileTest8 { public static void deleteAll(File file) { if(file.isFile() || 0 == file.list().length) { file.delete(); } else { File[] files = file.listFiles();
for(File f : files) { deleteAll(f); f.delete(); } } }
public static void main(String[] args) { File file = new File("C:/test");
try { deleteAll(file); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
把指定目录下的文件结构以树的形式打印出来
|
public class FileTest9 { // 判断目录或文件所在的层数 private static int times; // 把目录下的文件以树结构的形式打印出来。 static void treeShow(File file) { if (file.isFile() || 0 == file.listFiles().length) { return; } else { File[] files = file.listFiles(); files = sortFile(files); for (File f : files) { StringBuffer sb = new StringBuffer(); if (f.isDirectory()) { sb.append(getTAbs(times)); sb.append(f.getName()); sb.append("\\"); } else { sb.append(getTAbs(times)); sb.append(f.getName()); } System.out.println(sb); if (f.isDirectory()) { times++; treeShow(f); times--; } } } } // 取得每个目录或文件所处层数的缩进 private static String getTAbs(int times) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < times; i++) { sb.append("\t"); } return sb.toString(); } // 把目录下所有文件以目录为先的次序排序 private static File[] sortFile(File[] files) { List<File> list = new ArrayList<File>(); for (File f : files) { if (f.isDirectory()) { list.add(f); } } for (File f : files) { if (f.isFile()) { list.add(f); } } return list.toArray(new File[files.length]); } public static void main(String[] args) { File file = new File("C:/xdict"); treeShow(file); } } |
Stream类
从功能上分:输入流(InputStream)和输出流(OutputStream)
从结构上分:字节流(Byte Streams)和字符流(Character Streams)
字节流输入输出的基础是抽象类InputStream和OutputStream
字符流输入输出的基础是抽象类Reader和Writer
流的分类:
节点流:从特定的地方读写的流类。
过滤流:使用节点流作为输入或输出。过滤流是使用一个已存在的输入流或输出流连接创建的。
字节流的使用
FileInputStream类的使用
|
public class InputStreamTest { public static void main(String[] args) throws Exception { InputStream is = new FileInputStream("c:/hello.txt"); byte[] buffer = new byte[200]; int length = 0; if (-1 != (length = is.read(buffer, 0, 200))) { String str = new String(buffer, 0, length); System.out.println(str); } is.close(); } } |
FileOutputStream类的使用
|
public class OutputStreamTest { public static void main(String[] args) throws IOException { OutputStream os = new FileOutputStream("c:/out.txt",true);
String str = "\nwelcomle";
byte[] buffer = str.getBytes();
os.write(buffer);
os.close(); } } |
BufferedInputStream类,继承自FilterInputStream
|
|
BufferedOutputStream类,继承自FilterOutputStream
|
public class BufferedOutputStreamTest { public static void main(String[] args) throws Exception { OutputStream os = new FileOutputStream("1.txt");
BufferedOutputStream bos = new BufferedOutputStream(os);
bos.write("http://www.sina.com.cn".getBytes());
bos.close(); os.close(); } } |
ByteArrayInputStream类
|
public class ByteArrayInputStreamTest { public static void main(String[] args) throws Exception { String str = "abcdef";
byte[] byteArr = str.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(byteArr);
int c;
//一次只读一个字符 while(-1 != (c = bais.read())) { if(0==c) { System.out.println((char)c); } else { System.out.println(Character.toUpperCase((char) c)); } }
bais.close(); } } |
ByteArrayOutputStream类
|
public class ByteArrayOutputStreamTest { public static void main(String[] args) throws Exception { String str = "hello world welcome";
byte[] arr = str.getBytes();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//把字节数组写入到字节数组输出流中 baos.write(arr);
//从字节数组输出流中得到字节数组 byte[] result = baos.toByteArray();
for(byte b : result) { System.out.println((char)b); }
OutputStream os = new FileOutputStream("c:/test.txt");
//把字节数组写入到文件中。 baos.writeTo(os);
baos.close(); os.close(); } } |
DataInputStream类,继承自FilterInputStream
|
|
DataOutputStream类,继承自FilterOutputStream
|
public class DataOutputStreamTest { public static void main(String[] args) throws Exception { DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.txt")));
byte b = 3; int i = 12; char c = 'c'; float f = 0.3f;
dos.writeByte(b); dos.writeInt(i); dos.writeChar(c); dos.writeFloat(f);
dos.close();
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("data.txt")));
System.out.println(dis.readByte()); System.out.println(dis.readInt()); System.out.println(dis.readChar()); System.out.println(dis.readFloat());
dis.close(); } } |
自定义一个ByteArrayInputStream
|
public class MyOwnStream { public static void main(String[] args) throws Exception { byte[] bytes = new byte[16]; for (int i = 0; i < bytes.length; i++) { bytes[i] = (byte) i; } MyInputStream myis = new MyInputStream(bytes); int c = 0; while (true) { if (-1 == (c = myis.read())) { break; } System.out.print(c + " "); } myis.close(); } } // 这里使用了装饰者模式 class MyInputStream extends InputStream { protected byte[] buffer; protected int ptr = 0; public MyInputStream(byte[] bytes) { buffer = bytes; } @Override public int read() throws IOException { return (ptr < buffer.length) ? buffer[ptr++] : -1; } } |
重写InputStream类方法完整的例子
|
public class MyOwnStream2 extends InputStream { protected byte[] data; protected int ptr = 0; protected int mark = 0; public MyOwnStream2(byte[] bytes) { this.data = bytes; } @Override public int read() throws IOException { return (ptr < data.length) ? data[ptr++] : -1; } @Override public int read(byte[] b, int off, int len) throws IOException { if (ptr > data.length || len < 0) { return -1; } if ((ptr + len) > data.length) { len = data.length - ptr; } if (0 == len) { return 0; } System.arraycopy(data, ptr, b, off, len); ptr += len; return len; } @Override public long skip(long n) throws IOException { return super.skip(n); } @Override public int available() throws IOException { return data.length - ptr; } @Override public void close() throws IOException { ptr = data.length; } @Override public synchronized void mark(int readlimit) { this.mark = readlimit; } @Override public synchronized void reset() throws IOException { if (mark > 0 || mark < data.length) { throw new IOException("The position is invalid."); } ptr = mark; } @Override public boolean markSupported() { return true; } } |
字符流的使用
InputStreamReader
OutputStreamWrite
|
public class StreamTest { public static void main(String[] args) throws Exception { FileOutputStream fos = new FileOutputStream("file.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw); bw.write("http://www.google.com"); bw.write("\n"); bw.write("http://www.baidu.com"); bw.close(); FileInputStream fis = new FileInputStream("file.txt"); InputStreamReader isr = new InputStreamReader(fis); BufferedReader br = new BufferedReader(isr);
/*System.out.println(br.readLine()); System.out.println(br.readLine()); System.out.println(br.readLine());*/
String str = br.readLine(); while(null != str) { System.out.println(str); str = br.readLine(); } br.close(); } } |
BufferedReader
|
public class StreamTest2 { public static void main(String[] args) throws Exception { InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String str;
while(null != (str = br.readLine())) { System.out.println(str); }
br.close(); } } |
BufferedWrite
|
FileOutputStream fos = new FileOutputStream("file.txt"); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw); bw.write("http://www.google.com"); bw.write("\n"); bw.write("http://www.baidu.com"); bw.close(); |
FileReader
|
public class FileReaderTest { public static void main(String[] args) throws Exception { FileReader fr = new FileReader("src/com/anllin/io3/FileReaderTest.java");
BufferedReader br = new BufferedReader(fr);
String str ; while(null != (str = br.readLine())) { System.out.println(str); }
br.close(); } } |
FileWriter
|
public class FileWriteTest { public static void main(String[] args) throws Exception { String str = "hello world welcome nice bueaty";
char[] buffer = new char[str.length()];
str.getChars(0,str.length(),buffer,0);
FileWriter fr = new FileWriter("file2.txt");
fr.write(buffer);
fr.close(); } } |
CharArrayReader
|
public class CharArrayReaderTest { public static void main(String[] args) throws Exception { String str = "abcdefghijklmnopqrstuvwxyz";
char[] buffer = new char[str.length()];
str.getChars(0, str.length(),buffer,0);
CharArrayReader car = new CharArrayReader(buffer);
int i ;
while(-1 != (i = car.read())) { System.out.println((char)i); }
car.close(); } } |
字符集的分类:
ASCII GB2312 GBK Unicode iso-8859- 1 UTF-8
|
public class CharsetTest { public static void main(String[] args) { SortedMap<String,Charset> map = Charset.availableCharsets();
Set<String> set = map.keySet();
for(Iterator<String> iter = set.iterator(); iter.hasNext();) { System.out.println(iter.next()); } } } |
RandomAccessFile类,可以随机对文件进行读写操作。
|
public class RandomAccessFileTest { public static void main(String[] args) throws Exception { Person p = new Person(1, "anllin", 170); RandomAccessFile raf = new RandomAccessFile("person.txt", "rw"); p.write(raf); raf.seek(0);//让读的位置回到文件的开头 Person p2 = new Person(); p2.read(raf); System.out.println(p2.getId() + ", " + p2.getName() + ", " + p2.getHeight()); } } class Person { int id; String name; double height; public Person() { } public Person(int id, String name, double height) { this.id = id; this.name = name; this.height = height; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } public void write(RandomAccessFile raf) throws Exception { raf.writeInt(id); raf.writeUTF(name); raf.writeDouble(height); } public void read(RandomAccessFile raf) throws Exception { this.id = raf.readInt(); this.name = raf.readUTF(); this.height = raf.readDouble(); } } |