—————————— ASP.Net+Android+IOS开发、.Net培训、期待与您交流!——————————
IO流的概念:通过数据流、序列化和文件系统提供系统输入和输出。
IO流 提供的Api包在java.io包内。
流类图结构
1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter
2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream
3、是Char[]: CharArrayReader, CharArrayWriter
4、是String: StringBufferInputStream, StringReader, StringWriter
5、网络数据流:InputStream, OutputStream, Reader, Writer
二、按是否格式化输出分:
要格式化输出:PrintStream, PrintWriter
三、按是否要缓冲分:
要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter
四、按数据格式分:
1、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream结束的子类
2、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类
五、按输入输出分:
1、输入:Reader, InputStream类型的子类
2、输出:Writer, OutputStream类型的子类
六、特殊需要:
1、从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter
2、对象输入输出:ObjectInputStream, ObjectOutputStream
3、进程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter
4、合并输入:SequenceInputStream
5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader
决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):
第二,是输入还是输出? 输入流:InputStream Reader。输出流:OutputStream Writer。
第三,是否需要转换流:InputStreamReader, OutputStreamWriter?
第四,数据来源(去向)是什么:文件?内存?网络?
第五,是否要缓冲:bufferedReader (特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法)
第六,是否要格式化输出:print?
File类常见方法:
1,创建。 boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。
和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
boolean mkdir():创建文件夹。
boolean mkdirs():创建多级文件夹。
2,删除。 boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回falsel。
void deleteOnExit();在程序退出时删除指定文件。
3,判断。 boolean exists() :文件是否存在.
isFile():
isDirectory();
isHidden();
isAbsolute();
4,获取信息。 getName():
getPath():
getParent():
getAbsolutePath()
long lastModified()
long length()
列出指定目录下文件或者文件夹,包含子目录中的内容。因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。 在列出过程中出现的还是目录的话,还可以再次调用本功能。 也就是函数自身调用自身。 这种表现形式,或者编程手法,称为递归。
递归要注意:
1,限定条件。
2,要注意递归的次数。尽量避免内存溢出。
删除一个带内容的目录。 原理: 在window中,删除目录从里面往外删除的。既然是从里往外删除。就需要用到递归。
编码:字符串——>字节数组。
解码:字节数组——>字符串。
常见的编码表
ASCII:美国标准信息交换码。
用一个字节的7位可以表示。
ISO8859—1:拉丁码表。欧洲码表
用一个字节的8位表示。
GB2312:中国的中文编码表。
GBK:中国的中文编码表升级,融合了更多的中文文字符号。
Unicode:国际标准码,融合了多种文字。
所有文字都用两个字节来表示,Java语言使用的就是unicode
UTF—8:最多用三个字节来表示一个字符。
......
mp3文件复制:
import java.io.*;
public class CopyFile {
public static void main(String args[]) throws Exception {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\java\\老男孩.mp3"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\java\\复制之后.mp3"));
byte b[] = new byte[1024];
int len;
while ((len = bis.read(b)) != -1){
bos.write(b, 0, len);
}
bos.flush();
bos.close();
bis.close();
}
}
文本文件复制:
import java.io.*;
public class TestInputStream {
public static void main(String args[]) {
testBufferedStream();
}
static void testBufferedStream() {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream("D:\\java\\Test.java"));
bos = new BufferedOutputStream(new FileOutputStream("D:\\java\\Test.txt"));
} catch (FileNotFoundException e) {
System.out.println("系统找不到该文件");
e.printStackTrace();
}
byte bts[] = new byte[1024];
try {
while ((bis.read(bts))!=-1)
{
bos.write(bts);
}
bos.flush();
bis.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
—————————— ASP.Net+Android+IOS开发、.Net培训、期待与您交流!——————————