一.File类
文件名相关的方法
- String getName() 返回File对象的文件名
- String getPath() 返回File对象的相对路径
- File getAbsoluteFile() 返回File对象的绝对路径
- String getParent() 返回上一级父类名
文件检测相关的方法
- boolean exists() 判断File对象所对应的的文件是否存在
- boolean isAbsolute() 判断File对象是否是绝对路径
文件操作的相关的方法
- boolean createNewFile() 当对象对应的文件不存在时则创建该文件
- boolean delete() 删除对象所对应的文件
- static File createTempFile(String prefix,String suffix, File directory) 给指定目录下创建一个临时的空文件
- void deleteOnExit() 当虚拟机退出时删除这个文件
目录操作相关的方法
- String[] list() 列出File对象所有的子文件和路径名
- static File[] listRoots() 列出系统所有的根路径
如下是一些方法的实现例子;
public static void main(String[] args) throws IOException {
//以demo.txt文件创建file对象
File file = new File("D:\\filedemo\\demo.txt");
//获得file对象的文件名
System.out.println(file.getName());
//获得对象所对应的相对路径路径名
System.out.println(file.getPath());
//获得对象的父目录名
System.out.println(file.getParent());
//获得对象的绝对路径
System.out.println(file.getAbsoluteFile());
//获取上一级路径
System.out.println(file.getAbsoluteFile().getParent());
//重命名demo.txt文件夹为test.txt
System.out.println(file.renameTo(new File("test.txt")));
//指定在当前路径下创建一个临时文件
File tmpFile = File.createTempFile("aaa",".txt",file);
//指定当JVM退出时删除该文件
tmpFile.deleteOnExit();
//判断文件是否存在
System.out.println(tmpFile.exists());
//以指定的文件名创建新对象
System.out.println(tmpFile.createNewFile());
//使用list()方法列出当前路径下所有文件和路径
String[] fileList = file.list();
System.out.println("======当前路径下所有文件和路径如下======");
for (String s:
fileList) {
System.out.println(s);
}
//使用listRoots()静态方法列出所有的磁盘根路径
File[] roots = File.listRoots();
System.out.println("======系统所有的根路径======");
for (File a:
roots) {
System.out.println(a);
}
}
二.Java的IO流
Java中 IO流的类 InputStream、Reader、OutputStream、Writer
都是由这四个基类派生的
- 输入流输出流:根据数据从内存输入还是输出划分。
- 字节流字符流:根据数据单元划分,字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符。
- 节点流处理流:根据程序是否直接连接到数据源划分;
三.字节流和字符流
字节流和字符流的操作基本相同,只是操作的数据单元不同;
作为输入时的 InputStream 和 Reader
- int read() 从输入流中读取单个字节或字符;
- int read(byte[]/char[] b) 从输入流中最多读取b.length() 个字节或字符;
- int read(byte[]/char[] b, int off ,int len) 指定长度len,从off索引开始读取;
作为输出时的OutputStream 和 Writer
- int write(int c) 将指定的字节或字符输出到输出流中;
- int write(byte[]/char[] buf) 将指定数组的数据输出到输出流中
- int write(byte[]/char[] buf, int off, int len)指定长度len,从iff位置开始输出;
- void wtire(String s) 将指定字符串输出到输出流中;
- void write(String s, int off, int len)指定长度len,从off位置开始输出;
使用FileInputStream方法从输入流中读取数据;
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("D:\\filedemo\\demo.txt");
try{
byte[] b = new byte[1024];
int hasread = 0;
while ((hasread = fileInputStream.read(b)) > 0){
System.out.println(new String(b,0,hasread));
}
}
catch (IOException ioe){
ioe.printStackTrace();
}
finally {
fileInputStream.close();
}
}
使用FileOutputStream方法从把数据写入输出流;
public static void main(String[] args) throws IOException {
try (FileInputStream fileInputStream = new FileInputStream("D:\\filedemo\\demo.txt");
FileOutputStream fileOutputStream = new FileOutputStream("D:\\filedemo\\newdemo.txt")) {
byte[] b = new byte[1024];
int hasread = 0;
while ((hasread = fileInputStream.read(b)) > 0){
fileOutputStream.write(b,0,hasread);
}
}
}
使用FileWriter方法直接把内容些人输出流;
public static void main(String[] args) throws IOException {
try (FileWriter fileWriter = new FileWriter("D:\\filedemo\\poem.txt")) {
fileWriter.write("李白\r\n");
fileWriter.write("仰天大笑出门去,我辈岂是蓬蒿人\r\n");
fileWriter.write("金樽清酒斗十千,千金散去还复来\r\n");
}
}
四.节点流和处理流
使用InputStreamReader转换类把输入字节转换为输入字符,并且获得键盘输入的功能。 把转换类对象包装进入缓冲流对象,获得缓冲流中的readLine()方法,可以读取一行数据。
public static void main(String[] args) throws IOException {
try (InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {
String line = null;
while ((line = bufferedReader.readLine()) != null){
if (line.equals("exit")){
System.exit(1);
}
System.out.println("键盘输入的内容为" + line);
}
}
}
五.重定向标准输入/输出
使用重定向把把键盘输入转为从文件中输入;
static void setIn(InputStream in)
使用重定向把标准输出转向文件中
static void setOut(PrintStream out)
public static void main(String[] args) throws IOException {
try (PrintStream printStream =
new PrintStream(new FileOutputStream("D:\\filedemo\\newSetdemo.txt"))) {
System.setOut(printStream);
System.out.println("成功重定向标准输出");
}
}
public static void main(String[] args) throws IOException {
try (FileInputStream fileInputStream =
new FileInputStream("D:\\filedemo\\demo.txt")) {
//重定向标准输入
System.setIn(fileInputStream);
//获取标准输入
Scanner sc = new Scanner(System.in);
//增加下面一行只把回车作为分隔符
sc.useDelimiter("\n");
//判断是否还有下一项
while (sc.hasNext()){
System.out.println(sc.next());
}
System.out.println("成功重定向标准输出");
}
}
六.NIO.2
1. path方法和paths工具类
//使用指定路径创建path对象
Path path = Paths.get("指定路径");
//获取path的根路径
path.getRoot();
//获取path对应的绝对路径
Path absolutePath = path.toAbsolutePath();
//以多个String来创建Path对象
Path path2 = Paths.get("g:","publish","codes");
2.Files工具类
public static void main(String[] args) throws Exception {
//复制文件
Files.copy(Paths.get("D:\\\\filedemo\\\\demo.txt"),
new FileOutputStream("D:\\filedemo\\ademo.txt"));
//一次性读取所有行
List<String> lines = Files.readAllLines(Paths.get("D:\\filedemo\\ademo.txt")
, Charset.forName("utf-8"));
System.out.println(lines);
//判断文件大小
System.out.println(Files.size(Paths.get("D:\\filedemo\\ademo.txt")));
//将多个字符串内容写入指定文件中
List<String> list = new ArrayList<>();
list.add("将字符串内容");
list.add("写入指定文件");
Files.write(Paths.get("D:\\filedemo\\ademo.txt"),list,Charset.forName("utf-8"));
}