------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
File类
将文件或者文件夹封装成对象。
方便对文件与文件夹的属性信息进行操作。
File对象可以作为参数传递给流的构造函数。
常用方法:
exists()
判断文件或者文件夹是否存在。
createNewFile() 创建文件,如果存在不会覆盖。
delete()
删除文件或者文件夹
deleteOnExit()退出时删除
getAbsolutePath()获取绝对路径
getName()获取文件名
isFile()判断是否是文件
isDirectory()判断是否是目录
listFiles()获取目录下所有文件对象。
mkdir()创建文件夹
递归:
列出指定目录下文件或者文件夹,包含子目录中的内容。
也就是列出指定目录下所有内容。
因为目录中还有目录,只要使用同一个列出目录功能的函数完成即可。
在列出过程中出现的还是目录的话,还可以再次调用本功能。
也就是函数自身调用自身。
这种表现形式,或者编程手法,称为递归。
递归要注意:
1,限定条件。
2,要注意递归的次数。尽量避免内存溢出。
递归练习:把目录下所有.java 文件拷贝至另一目录下,并改后缀名为 .txt 。
public class Test13true {
public static void main(String[] args) throws IOException {
File dir = new File("E:\\java2014\\day01");//原目录
File newdir = new File("E:\\mytest");//新目录
newdir.mkdir();//创建目录
copyJava(dir,newdir);
}
public static void copyJava(File dir,File newdir) throws IOException
{
File[] files = dir.listFiles();//列出目录下所有文件对象。
for(File file : files)//遍历数组
{
if(file.isDirectory())//判断是否是目录
copyJava(file,newdir);//调用自己,递归。
else
{
if(file.getName().endsWith(".java"))//判断后缀名
{
File f = new File(newdir,file.getName());
File newf = new File(newdir,file.getName().replaceAll("\\.java",".txt"));//改后缀名。
copy(file,f);//复制文件。
// boolean b =f.renameTo(newf);//改名。
// System.out.println(b);//判断是否改名成功。
}
}
}
}
public static void copy(File yuan,File mudi) throws IOException
{
BufferedReader bffr = new BufferedReader(new FileReader(yuan));//关联原文件
BufferedWriter bffw = new BufferedWriter(new FileWriter(mudi));//写入新文件
String line = null;
while((line=bffr.readLine())!=null)
{
bffw.write(line);
bffw.newLine();
bffw.flush();
}
bffr.close();
bffw.close();
}
}
其他流对象:
SequenceInputStream:合并流 需要枚举作为参数。
class SequenceDemo
{
public static void main(String[] args) throws IOException
{
Vector<FileInputStream> v = new Vector<FileInputStream>();
v.add(new FileInputStream("c:\\1.txt"));
v.add(new FileInputStream("c:\\2.txt"));
v.add(new FileInputStream("c:\\3.txt"));
Enumeration<FileInputStream> en = v.elements();//获取枚举
SequenceInputStream sis = new SequenceInputStream(en);//枚举作为参数。
FileOutputStream fos = new FileOutputStream("c:\\4.txt");
byte[] buf = new byte[1024];
int len =0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
}
ObjectInputStream与ObjectOutputStream
对象的序列化,持久化。
被操作的对象需要实现Serializable (标记接口);此接口没有定义内容。
类中可以定义UID标识。
RandomAccessFile
内部封装一个大型的字节数组。自身可以读和写(其实内部封装了相应的字节流)。
可以通过seek 设置指针的位置,达到多段读写的目的。
而且它在输出时不会覆盖文件。
可以实现多线程多段读写。(分段下载电影就是这个原理。)
管道流:
PipedInputStream和PipedOutputStream
输入输出可以直接进行连接,通过结合线程使用。
操作基本数据类型:
DataInputStream与DataOutputStream
writeInt( ) readInt( )这样的方法 专门用于操作基本数据类型。
操作字节数组:
ByteArrayInputStream与ByteArrayOutputStream
以内存为源和目的。
没有涉及到系统资源,所以无需关闭。关闭了还可以使用。
打印流
PrintWriter与PrintStream
该流提供了打印方法,可以将各种数据类型的数据都原样打印。
字节打印流:
PrintStream
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
字符打印流:
PrintWriter
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
4,字符输出流,Writer。
打印流println( )可以实现 输出 换行 刷新的功能,非常实用。
class PrintStreamDemo
{
public static void main(String[] args) throws IOException
{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));//读取键盘录入
PrintWriter out = new PrintWriter(new FileWriter("a.txt"),<span style="color:#ff0000;">true</span>);//可以设置自动刷新。println具有自动刷新功能。
String line = null;
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
out.println(line.toUpperCase());//输出 换行 刷新
//out.flush();
}
out.close();//关闭资源
bufr.close();//<span style="font-family: Arial, Helvetica, sans-serif;">关闭资源</span>
}
}
字符编码:
常见编码表:
ASCII:美国标准信息交换码。
ISO8859-1:拉丁码表。欧洲码表(tomcat服务器使用的就是此码表)
GBK:中国的中文编码表
Unicode:国际标准码,融合了多种文字。Java语言使用的就是unicode
UTF-8
编码:字符串变成字节数组。
解码:字节数组变成字符串。
String-->byte[]; str.getBytes(charsetName);
byte[ ] -->String: new String(byte[ ],charsetName);
当我们用GBK编码后,解码却使用的是ISO8859-1。这时候我们可以将字符串再
用ISO8859-1编一次码,还原成正确的字节数据,再使用GBK进行解码,这样就OK了。
示例:
public static void main(String[] args)throws Exception
{
String s = "黑马";
byte[] b1 = s.getBytes("gbk");//gbk编码
System.out.println(Arrays.toString(b1));
String s1 = new String(b1,"iso8859-1");//iso8859-1解码
System.out.println("s1="+s1);
byte[] b2 = s1.getBytes("iso8859-1");//再iso8859-1编码
System.out.println(Arrays.toString(b2));
String s2 = new String(b2,"gbk");//再gbk解码
System.out.println("s2="+s2);
}
以上内容为本人笔记,仅供参考。