java基础-IO
------------------------------下面我们从File类开始----------------------------------------------
文件流一般都是File开头的,操作基于文件
缓冲流都是Buffer开头,操作基于内存
File只能操作文件本身,但不能操作文件内容,就像是类似于可以拿日记本不能写日记。
这里面记住windows下为\\ 因为\是转义符,所以\\才代表一个\
下面看看File类的常用方法图
来看一个案例
先创建一个文件
同样,上面还有很多方法,用到的时候都可以用同样的方式测试一下效果,主要参考上面方法图
下面来看一个有点用的遍历文件夹的一个案例
package File; import java.io.File; public class FileDemo { public void test(File file) { if (file.isFile()) { System.out.println(file.getAbsolutePath() + "是文件"); } else { System.out.println(file.getAbsolutePath() + "是文件夹"); //是文件夹就遍历 File[] files = file.listFiles(); //获取当前文件夹的子文件夹或者文件的file对象 if (files != null && files.length > 0) { for (File ff : files) { test(ff);//递归 } } } } }
package File; import java.io.File; public class test { public static void main(String[] args) { File f= new File("D:\\Temp"); FileDemo demo = new FileDemo(); demo.test(f); } }
学习完了上面的内容后相信你对文件与io有一点的认识了,同时也好奇怎样可以操作文件的内容呢
别急,先看一个IO流的总图
示例:字符流-将用户在控制台中输入的内容保存到文件中
public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); String data = scanner.next(); FileWriter writer = new FileWriter("f.txt"); writer.write(data); writer.flush(); writer.close(); }
//flush() 是清空,而不是刷新,可以理解为强制把数据输出完毕。
即清空缓冲区数据,就是说你用读写流的时候,其实数据是制先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,
因为还有一部知分有可能会留在内存这个缓冲区中。这时候如果你调用了 close()方法关闭了读写流,那么这部分数据就会丢失,
所以应该在关闭读写流之前先flush(),强制把数据输出.清空数据。即把内存的内容刷写到硬盘
再来看一个字节流的案例
package FileInput; import java.io.FileInputStream; public class Test { public static void main(String[] args) { try { FileInputStream in = new FileInputStream("D:\\Temp\\TxGameDownload\\aaa.txt"); byte[]b=new byte[10]; in.read(b); System.out.println(new String(b)); //转化为字符串输出 in.close();//注意流用完一定要关闭 } catch (Exception e) { e.printStackTrace(); } } }
这里面有一个问题就是数据如果多了不止10个怎么办
首先需要明白
/FileInputStream.read方法有一个返回值,返回值是读取的数据的长度如果,读到最后还会往后读一个,这时候就会返回-1
//所以in.read返回-1即整个文件读取完毕
所以
那我们再来一个字符流的案例吧
public static void main(String[] args) throws IOException {//psvm File file = new File("F:\\安装GCC.txt"); FileReader reader = new FileReader(file); int read = reader.read(); //read() 一次读取一个字符 System.out.print((char)read); while(read != -1){ read = reader.read(); System.out.print((char)read); } reader.close(); }
方式二
public static void main(String[] args) throws IOException {//psvm File file = new File("F:\\安装GCC.txt"); FileReader reader = new FileReader(file); char[] buf = new char[64]; int len = reader.read(buf); //将数据读取到buf中,返回读取到的字符的个数 while(len != -1){ System.out.println(new String(buf,0,len)); len = reader.read(buf);// } reader.close(); }
这上面都是输出到控制台
那再看个案例,输入到文本
package FileInput; import java.io.FileOutputStream; public class Test { public static void main(String[] args) { try{ FileOutputStream out = new FileOutputStream("D:\\Temp\\TxGameDownload\\aaa.txt"); String str="dsffsdsfdf"; out.write(str.getBytes()); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } }