绝对路径:文件存放在操作系统中的完整路径;c:\\program\\java\\A.java
相对路径:相对于当前目录而言的路劲,不会从根目录出发;
1.文件读写;
一般读写文件需要两次拷贝,从磁盘读取到操作系统内核,在由内核拷贝到应用程序内存中,操作系统在内核态,用户程序是用户态,应用系统调用操作系统的功能需要切换两种时态,先是从用户态切换到内核态,再由内核态切换到用户态,这样开销很大,所以需要尽量减少这样的开销;
打开一个文件的时候,会在操作系统内核建立一个有关该文件的内存结构,这个文件结构通常以一个整数索引来引用,这个索引一般称为文件描述fd,这个结构是消耗内存的,操作系统能同时打开的文件结构也是有限的,所以需要记得关闭文件,关闭的时候会将fd缓冲区的数据同步到内存上。
2.java文件描述:
io的输入流,输出流
输入流:输入流是可以从中获取数据,输入流的实际提供者可以是键盘,文件,网络;inputStream,FileInputStream
输出流:可以向其中写入数据,实际目的地可以是显示终端,文件,网络等。OutStream,FileOutStream;
InputStream inputStream = null; OutputStream outputStream = null; try { inputStream = new FileInputStream(new File("D:\\wifi密码.txt")); outputStream = new FileOutputStream(new File("D:\\wifi密码2.txt")); int temp = 0; byte[] b = new byte[1024]; while ((temp = inputStream.read(b)) != -1) { outputStream.write(b); } } catch (Exception e) { e.printStackTrace(); } finally { try { inputStream.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } System.out.println("读取完成"); }
Inputstream 和 OutputStream 都是二进制的形式操作数据;不能方便的操作文本文件,没有编码的概念,能够方便的按照字节处理文本数据的基类是 Reader和Writer; 通俗的讲:write,reader 能够操控字符,它能做的inputstream和outputstream 也能做,反过来就不行了;
BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(new File("D:\\wifi密码.txt"))); int b = 0; char[] c = new char[1024]; while((b = reader.read(c)) !=-1){ System.out.println(new String(c,0,b)); } } catch (Exception e) { e.printStackTrace(); }
File f = new File("D:\\write.txt"); try { Writer writer = new FileWriter(f); writer.write("hello world"); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); }