本文共 4781 字,大约阅读时间需要 15 分钟。
package ch15;import java.io.*;/** * Created by Jiqing on 2016/12/28. */public class FileTest { public static void main(String[] args) throws IOException{ // 以当前路径创建一个File对象 File file = new File("."); System.out.println(file.getName()); // 获取相对路径 System.out.println(file.getParent()); // 获取绝对路径 System.out.println(file.getAbsoluteFile()); //C:\Users\e550\IdeaProjects\crazyJava\. // 获取上级路径 System.out.println(file.getAbsoluteFile().getParent()); //C:\Users\e550\IdeaProjects\crazyJava // 在当前路径下创建一个临时文件 File tmpFile = File.createTempFile("temp",".txt",file); // 指定当JVM退出时删除文件 tmpFile.deleteOnExit(); // 使用list()方法列出当前路径下所有文件和路径 String[] fileList = file.list(); System.out.println("====当前路径下所有文件和路径如下===="); for (String fileName :fileList) { System.out.println(fileName); } // listRoots() 静态方法列出所有磁盘根路径 File[] roots = File.listRoots(); for(File root:roots) { System.out.println(root); } }}
执行结果:
. null C:\Users\e550\IdeaProjects\crazyJava. C:\Users\e550\IdeaProjects\crazyJava 当前路径下所有文件和路径如下 .git .idea crazyJava.iml image out src temp108678927822844352.txt C:
D: E: F:\
方法论:尝试自己改造一下,能够加深对内容的理解。
Java可以读取并操作文件,还是蛮厉害的。
在Java中把不同的输入输出源(键盘、文件、网路连接)抽象表述为“流”。
1.输入流、输出流
2.字节流、字符流
字节流通过InputStream和OutputStream来操作,数据单元是8位的字节
字符流通过Reader和Writer来操作,数据单元是16位的字符
3.节点流、处理流
处理流可以包装节点流进行数据传输,通过处理流,Java程序无需理会输入输出节点是磁盘、网络还是其他输入输出设备,程序只要将节点包装成处理流,就可以使用相同的输入、输出代码来读不通的输入输出设备的数据。
package ch15;import java.io.*;/** * Created by Jiqing on 2016/12/28. */public class FileInputStreamTest { public static void main(String[] args) throws IOException { File file = new File("."); // 创建字节输入流 FileInputStream fis = new FileInputStream(file.getAbsoluteFile().getParent()+"/src/ch15/FileInputStreamTest.java"); // 创建一个长度为1024的竹筒 byte[] bbuf = new byte[1024]; // 保存实际读取的字节数 int hasRead = 0; // 使用循环来重复“取水” while ((hasRead = fis.read(bbuf)) > 0) { // 取出竹筒中的水滴 System.out.print(new String(bbuf,0,hasRead)); } // 关闭文件输入流 fis.close(); }}
package ch15;import java.io.*;/** * Created by Jiqing on 2016/12/28. */public class FileReaderTest { public static void main(String[] args) throws IOException { File file = new File("."); try( // 创建字符输入流,输入到内存 FileReader fr = new FileReader(file.getAbsoluteFile().getParent()+"/src/ch15/FileReaderTest.java")) { // 创建一个长度为32的竹筒 char[] cbuf = new char[32]; // 用于保存实际读取的字符数 int hasRead = 0; // 使用循环来重复取水 while ((hasRead = fr.read(cbuf)) > 0) { System.out.print(new String(cbuf,0,hasRead)); } } catch (IOException ex) { ex.printStackTrace(); } }}
竹筒的长度只要大于单位长度即可,32表示一次装入的字符数
package ch15;import java.io.*;/** * Created by Jiqing on 2016/12/28. */public class FileInputStreamTest { public static void main(String[] args) throws IOException { File file = new File("."); // 创建字节输入流 FileInputStream fis = new FileInputStream(file.getAbsoluteFile().getParent()+"/src/ch15/FileInputStreamTest.java"); FileOutputStream fos = new FileOutputStream("newFile.txt"); // 创建一个长度为1024的竹筒 byte[] bbuf = new byte[128]; // 保存实际读取的字节数 int hasRead = 0; // 使用循环来重复“取水” while ((hasRead = fis.read(bbuf)) > 0) { // 取出竹筒中的水滴// System.out.println(hasRead);// System.out.print(new String(bbuf,0,hasRead)); fos.write(bbuf,0,hasRead); } // 关闭文件输入流 fis.close(); }}
package ch15;import java.io.*;/** * Created by Jiqing on 2016/12/28. */public class FileReaderTest { public static void main(String[] args) throws IOException { File file = new File("."); try( // 创建字符输入流,输入到内存 FileReader fr = new FileReader(file.getAbsoluteFile().getParent()+"/src/ch15/FileReaderTest.java"); FileWriter fw = new FileWriter("newWriterFile.txt") ) { // 创建一个长度为32的竹筒 char[] cbuf = new char[32]; // 用于保存实际读取的字符数 int hasRead = 0; // 使用循环来重复取水 while ((hasRead = fr.read(cbuf)) > 0) {// System.out.println(hasRead);// System.out.print(new String(cbuf,0,hasRead)); fw.write(cbuf,0,hasRead); } } catch (IOException ex) { ex.printStackTrace(); } }}
流就是水滴,有意思。输入流,从文件输入到内存。输出流,从内存输出到硬盘。输入,表示读取数据。输出,表示写入数据。
本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6231290.html,如需转载请自行联系原作者