Java基础-IO流对象之File类

时间:2022-09-19 11:26:41

                  Java基础-IO流对象之File类

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.IO技术概述

  回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了。那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据读出来继续使用呢?其实要把数据持久化存储,就需要把内存中的数据存储到内存以外的其他持久化设备(硬盘、光盘、U盘等)上。

  当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作,当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作,因此我们把这种输入和输出动作称为IO操作。

二.File类的作用

  我们可以一起看看Java的API对File类的描述如下:

Java基础-IO流对象之File类

  综上,我们可以总结File类有以下特点:

    1>.将操作系统中的文件(file),目录(文件夹,directory),路径(path),封装成File对象;

    2>.File对象提供很多方法可以操作系统中的内容;

    3>.File类是与系统无关的类;

三.File类静态的成员变量

  我们在编写程序的时候,最好不要把操作系统的分隔符或者是路径的分隔符写死,除非你明确它的执行环境,不然最好还是用变量去代替!File定义了这两个变量,用法如下:

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File; public class FileDemo {
public static void main(String[] args) {
//与系统有关的路径分隔符,windows用“;”表示,Linux用“:”表示。
String pathseparator = File.pathSeparator;
System.out.println(pathseparator); //与系统有关的默认名称分隔符,Windows为“\”,而Linux以“/”分割
String separator = File.separator;
System.out.println(separator); }
} /*
以上代码执行结果如下:
;
\
*/

四.File类构造方法

1>.File(String pathname)

  传递路径名:可以写到文件夹,也可以写到一个文件。该方法发的作用就是将路径封装成File类型对象。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File; public class FileDemo {
public static void main(String[] args) {
//注意,windows路径可以写成“\\”进行分割。
File file = new File("D:\\10.Java");
System.out.println(file);
//Linux操作系统就建议用这种方式写,不过在Windows操作系统这样写也是可以的,效果和上面等效!
file = new File("D:/10.Java");
System.out.println(file);
}
} /*
以上代码执行结果如下:
D:\10.Java
D:\10.Java
*/

2>.File(String parent,String child)

  传递路径:需要传递字符串父路径(parent)以及字符串子路径(child),用“,”进行分割。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File; public class FileDemo {
public static void main(String[] args) {
//注意,windows路径可以写成“\\”进行分割。
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","eclipse");
System.out.println(file);
}
} /*
以上代码执行结果如下:
D:\10.Java\JavaSE\eclipse\Myprogram\eclipse
*/

3>.File(File parent,String child)

  传递路径:传递File类型父路径,字符串子路径。

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File; public class FileDemo {
public static void main(String[] args) {
File parent = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram");
//父路径为一个File对象
File file = new File(parent,"eclipse");
System.out.println(file);
}
} /*
以上代码执行结果如下:
D:\10.Java\JavaSE\eclipse\Myprogram\eclipse
*/

五.File类的常用方法

1>.File类创建文件功能

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie.txt");
//创建file文件,如果创建成功就返回true,如果文件已经存在就不会创建,并返回false,注意,该方法需要抛异常:IOException.
boolean res = file.createNewFile();
System.out.println(res);
}
} /*
以上代码执行结果如下:
true
*/

2>.File类创建目录功能

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie");
//创建单级文件夹
boolean res = file.mkdir();
System.out.println(res);
file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie/test/a/b/c");
//创建多级文件夹
res = file.mkdirs();
System.out.println(res);
}
} /*
以上代码执行结果如下:
true
true
*/

3>.File类删除功能【删除有风险,运行需谨慎!】

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie");
//删除空文件夹,删除成功就返回true,删除失败就返回false,删除方法不走回收站,直接从硬盘中删除。
boolean res = file.delete();
System.out.println(res); }
} /*
以上代码执行结果如下:
true
*/

4>.File类获取功能

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie");
//获取文件名称
String fileName = file.getName();
System.out.println(fileName);
//获取父路径
String getParent = file.getParent();
System.out.println(getParent);
//获取绝对路径
File absoluteFile = file.getAbsoluteFile();
System.out.println(absoluteFile); }
} /*
以上代码执行结果如下:
yinzhengjie
D:\10.Java\JavaSE\eclipse\Myprogram
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie
*/

5>.File类判断功能

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram","yinzhengjie");
if(!file.exists()) { //如果file对象封装的路径就执行以下代码
file.mkdirs(); //创建该目录对象
System.out.println(file.isDirectory()); //判断其是否为目录。
System.out.println(file.isFile()); //判断其是否为文件,如果上面为true,则说明该File对象是目录而非文件
}
}
} /*
以上代码执行结果如下:
true
false
*/

6>.File类list获取功能

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram");
//用list方法获取文件和目录,返回的是字符串数组
String[] fileList = file.list();
for (String fileName : fileList) {
System.out.println(fileName);
} //用listFiles方法返回的是文件的绝对路径,返回的是File数组,推荐使用这种方法。
File[] listFiles = file.listFiles();
for (File fileName : listFiles) {
System.out.println(fileName);
} //获取系统中的所有根目录,包括你的移动分区,硬盘分区,只要是挂在到当前操作系统中的都能查出来!
File[] listRoots = file.listRoots();
for (File rootName : listRoots) {
System.out.println(rootName);
}
}
} /*
以上代码执行结果如下:
eclipse
workspace
yinzhengjie
D:\10.Java\JavaSE\eclipse\Myprogram\eclipse
D:\10.Java\JavaSE\eclipse\Myprogram\workspace
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie
C:\
D:\
E:\
F:\
*/

六.文件过滤器

1>.文件过滤器原理分析

  a>.listFiles() 遍历目录的同时,获取到了文件名全路径,调用过滤器的方法 accept将获取到的路径传递给accept反方的参数pathname;

  b>.accept方法接受到了参数pathname,参数的是listFiles传递来的,在accept方法通过一系列逻辑判断(比如判断这个路径是否为Java文件),然后返回相应的布尔值;

  c>.一旦返回了true,listFiles将路径,保存在File数组中,如果为false,那么就真的被过滤掉了(就不会保存在File数组中);

2>.案例展示

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.FileFilter;
import java.io.IOException; class MyFile implements FileFilter{ @Override
public boolean accept(File pathname) {
//判断文件是否为java文件,
return pathname.getName().toLowerCase().endsWith(".java");
} } public class FileDemo { public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie");
File[] listFiles = file.listFiles(new MyFile());
for (File fileName : listFiles) {
System.out.println(fileName);
}
}
} /*
以上代码执行结果如下:
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayArrayDemo.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayArrayDemo1.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayArrayDemo2.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayArrayDemo3.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\callName.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Car.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\CarDemo.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Demo1.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Dog.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\DogDemo.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Engine.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Person.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\PersonDemo.java
*/

七.方法的递归调用

  方法的递归调用不仅仅是Java语言自己的特点,类似于Python,C++,C,golang等高级语言都有递归用法,递归方法说白了就是自己调用自己。递归方法适用于方法中运算的主题不变,但是运行的时候,参与运行的方法参数会变化,关于Java中的递归调用要注意以下几点:

    a>.递归一定要有出口,必须可以让程序停下;

    b>.递归次数不能过多;

    c>.构造方法,禁止递归;

  接下来我们就来几个递归的案例展示吧:

1>.递归变量全目录

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie");
getAllDir(file);
} public static void getAllDir(File dir) {
File[] listFiles = dir.listFiles();
for (File file : listFiles) {
//判断变量file表示的路径是不是文件夹
if(file.isDirectory()) {
//如果是目录就继续遍历这个目录
getAllDir(file);
}else {
System.out.println(file);
}
}
} } /*
以上代码执行结果如下:
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo1.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo2.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo3.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\arrayArrayDemo.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\arrayArrayDemo1.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\arrayArrayDemo2.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\arrayArrayDemo3.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\callName.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Car.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\CarDemo.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Demo1.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Dog.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\DogDemo.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Engine.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\Person.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\bin\PersonDemo.class
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\callName.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Car.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\CarDemo.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Demo1.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Dog.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\DogDemo.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Engine.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Person.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\PersonDemo.java
*/

2>.递归求和计算

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie");
int sum = getSum(10000);
System.out.println(sum);
} /*如果只是求和运算的话,不建议用递归,因为递归设计到弹栈和压栈,开销是比较大的用for循环还是
相当不错的,不过这里只是为了演示递归用法,就不用这么吹毛求疵啦!*/
public static int getSum(int number) {
if(number == 1) {
return 1;
}
return number + getSum(number - 1 );
} } /*
以上代码执行结果如下:
50005000
*/

3>.递归求阶乘

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie");
int sum = getFactorial(5);
System.out.println(sum);
} /*如果只是求和运算的话,不建议用递归,因为递归设计到弹栈和压栈,开销是比较大的用for循环还是
相当不错的,不过这里只是为了演示递归用法,就不用这么吹毛求疵啦!*/
public static int getFactorial(int number) {
if(number == 1) {
return 1;
}
return number * getFactorial( number - 1 );
}
} /*
以上代码执行结果如下:
120
*/

4>.递归计算斐波那契数列

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.IOException; public class FileDemo { public static void main(String[] args) throws IOException {
int sum = getFibonaccieries(45);
System.out.println(sum);
} /*如果只是求和运算的话,不建议用递归,因为递归设计到弹栈和压栈,开销是比较大的用for循环还是
相当不错的,不过这里只是为了演示递归用法,就不用这么吹毛求疵啦!*/
public static int getFibonaccieries(int number) {
if( number == 1 ) {
return 1;
}else if( number == 2 ) {
return 1;
}else {
return getFibonaccieries(number -1 ) + getFibonaccieries(number - 2 );
}
}
} /*
以上代码执行结果如下:
1134903170
*/

5>.遍历目录下的所有java文件

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.note5; import java.io.File;
import java.io.FileFilter;
import java.io.IOException; class MyFile implements FileFilter{ @Override
public boolean accept(File pathname) {
//判断获取的是目录,直接返回true
if(pathname.isDirectory()) {
return true;
}
//如果不是目录再判断文件是否为java文件,
return pathname.getName().toLowerCase().endsWith(".java");
} } public class FileDemo { public static void main(String[] args) throws IOException {
File file = new File("D:\\10.Java\\JavaSE\\eclipse\\Myprogram\\yinzhengjie");
getJavaFiles(file);
} public static void getJavaFiles(File dir) {
//调用File对象方法listFiles()获取,加入过滤器
File[] listFiles = dir.listFiles(new MyFile());
for (File fileName : listFiles) {
//对fileName路径进行判断,是否为文件夹
if(fileName.isDirectory()) {
getJavaFiles(fileName);
}else {
System.out.println(fileName);
}
}
} } /*
以上代码执行结果如下:
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo1.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo2.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\arrayListDemo\arrayArrayDemo3.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\callName.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Car.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\CarDemo.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Demo1.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Dog.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\DogDemo.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\demo\Engine.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\Person.java
D:\10.Java\JavaSE\eclipse\Myprogram\yinzhengjie\PersonDemo.java
*/

Java基础-IO流对象之File类的更多相关文章

  1. Java基础-IO流对象之字符类(FileWrite与FileReader)

    Java基础-IO流对象之字符类(FileWrite与FileReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见编码简介 1>ASCII 我们知道计算机是 ...

  2. Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)

    Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...

  3. Java基础-IO流对象之字节流(Stream)

    Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...

  4. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  5. Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

    Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

  6. Java基础-IO流对象之打印流(PrintStream与PrintWriter)

    Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...

  7. java基础-IO流对象之Properties集合

    java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...

  8. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

  9. Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter)

    Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...

随机推荐

  1. OpenJudge2728:摘花生 解题报告

    2728:摘花生 总时间限制:  1000ms 内存限制: 65536kB 描述 Hello Kitty 想摘点花生送给她喜欢的米老鼠.她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南 ...

  2. HTTP协议学习---(三)摘要认证

    Http 摘要认证 这个认证可以看做是基本认证的增强版本,使用随机数+密码进行md5,防止通过直接的分析密码MD5防止破解. 摘要访问认证最初由 RFC 2069 (HTTP的一个扩展:摘要访问认证) ...

  3. autohotkey在运维中的应用

         AutoHotkey是一个*.开源的宏生成器和自动化软件工具,它让用户能够自动执行重复性任务.AutoHotkey可以修改任何应用程序的用户界面(例如,把默认的Windows按键控制命令替 ...

  4. Php设计模式(三):行为型模式part2

    原文详见:http://www.ucai.cn/blogdetail/7023?mid=1&f=5 可以在线运行查看效果哦! <接上文> 5.中介者模式(Mediator) : 用 ...

  5. Java 读书笔记 &lpar;十一&rpar; Number &amp&semi; Math 类

    所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number的子类. 这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译 ...

  6. JMeter&&num;160&semi;关于JMeter&&num;160&semi;正则表达式提取器的一点研究

    关于JMeter 正则表达式提取器的一点研究   by:授客 QQ:1033553122 1.   实验环境: JMeter 2.13 2.   添加正则表达式提取器 右键线程组->添加-&gt ...

  7. 安全易用的云许可-VirboxLM许可管理平台

    Virbox LM是深思推出的基于云许可管理的开放平台,旨在为开发者提供低成本.高强度.操作便捷的一站式软件保护方案. Virbox LM包括用户许可管理工具.加壳工具.API帮助工具.开发商管理工具 ...

  8. 20145333 《网络对抗技术》 PC平台逆向破解

    20145333 <网络对抗技术> PC平台逆向破解 20145333 <网络对抗技术> PC平台逆向破解 Shellcode注入 基础知识 Shellcode实际是一段代码, ...

  9. openvpn mac客户端tunnelblick连接后自动添加路由

    在openvpn 的服务器配置文件添加配置设置客户端连接后自动添加一条路由 示例: vim /etc/openvpn/server.conf # Push routes to the client t ...

  10. 2016&period;1&period;1 VS中宏的使用技巧点滴

    Dim selection As TextSelection = DTE.ActiveDocument.Selection'定义 TextSelection 对象 selection.StartOfL ...