
本文共 5810 字,大约阅读时间需要 19 分钟。
0x01、File类
File类主要用于文件和目录创建、查找、删除等操作的。
1、file类的构造方法
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
2、常用方法:
public String getAbsolutePath() :返回此File的绝对路径名字符串。public String getPath() : 将此File转换为路径名字符串。public String getName() : 返回由此File表示的文件或目录的名称。public long length() : 返回由此File表示的文件的长度。
代码示例:
public static void main(String[] args) { String Pathname = "C:\\Users\\86183\\Desktop\\a.txt"; File abc = new File(Pathname); System.out.println(abc.getAbsolutePath()); String Pathname1 = "C:\\Users\\86183\\Desktop\\a.txt"; File abc1 = new File(Pathname1); System.out.println(abc1.getAbsolutePath()); System.out.println(abc1.getPath()); System.out.println(abc1.length());}
3、判断方法
public boolean exists() : 此File表示的文件或目录是否实际存在。public boolean isDirectory() :此File表示的是否为目录。public boolean isFile() : 此File表示的是否为文件。
代码示例:
public static void main(String[] args) { String Pathname = "C:\\Users\\86183\\Desktop\\artifact.exe"; File abc = new File(Pathname); boolean a = abc.exists(); System.out.println(a); System.out.println(abc.isFile()); System.out.println(abc.isDirectory());}
4、增删功能方法
public boolean createNewFile() :当前仅当具有该名称的文件尚不存在时,创建一个新的空文件。public boolean delete() :删除由此File表示的文件或目录。public boolean mkdir() :创建由此File表示的目录。public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
public static void main(String[] args) throws IOException { String Pathname = "a.txt"; File abc = new File(Pathname); boolean file = abc.createNewFile(); System.out.println(file+"\n"+abc.getAbsolutePath()); File abc1 = new File("abc"); abc1.mkdir(); File abc2 = new File("abc\\abc"); abc2.mkdirs(); }
如果是对目录进行删除,删除的目录必须为空才能进行删除。
5、目录遍历
在file里面给我们提供了,可以直接获取file目录下面所有子文件或目录。
public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。
public static void main(String[] args) throws IOException { String Pathname = "../"; File abc = new File(Pathname); String[] name = abc.list(); for (String s : name) { System.out.println(s); } }
使用list方法获取所有文件,然后使用增强for循环进行遍历。
0x02、字节流
- I : Input 输入 从其他存储设备读数据到内存中就是输入
- O : Output 输出 从内存中写数据到其他存储设备
根据数据的流向分为:输入流和输出流。
输入流 :把数据从其他设备上读取到内存中的流。
- 字节输入流:以字节为基本单位,读数据
- 字符输入流:以字符为基本单位,读数据
输出流 :把数据从内存 中写出到其他设备上的流。
字节输出流:以字节为基本单位,写出数据
字符输出流:以字符为基本单位,写出数据
1、字节输出流
OutputStream抽象类是字节输入流的超类,他定义了几个共性的方法。
public void close():关闭此输出流并释放与此流相关联的任何系统资源。 public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。 public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。 public abstract void write(int b) :将指定的字节输出流。
close方法,当完成流的操作时,必须调用此方法,释放系统资源。
(1)、FileOutputStream类
FileOutputStream类是文件输出流,用于将数据些出到文件当中。
查看构造方法:
public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。public FileOutputStream(String name) : 创建文件输出流以指定的名称写入文件。
如果创建一个io流的对象,必须传入文件的路径,,如果没有该文件就会创建该文件,如果有就会清空原本有的数据。
代码:
public static void main(String[] args) throws IOException { File file = new File("a.txt"); FileOutputStream FileoutDate = new FileOutputStream(file); FileoutDate.write(97); FileoutDate.close(); }
这里写进入一个97,但是打开文件会发现写进入的变成了a,这是因为我们这里是以byte形式进行写入的,,而97的ascii转换为字符后,就是a这个字符。
这里还可以指定写出的数据长度
Public class FileOutput { public static void main(String[] args) throws IOException { File file = new File("a.txt"); FileOutputStream FileoutDate = new FileOutputStream(file); byte[] b = "abce3".getBytes(); FileoutDate.write(b,2,2); FileoutDate.close(); } }
这里要先获取字符的字节类型数据,使用write写入,从第二位开始索引,写入2个字节。
在程序开发中,有些数据可能没法一次执行获取所有结果,这时候我们如果以上面的方式来循环写入运行结果的话,每次循环就都会被清空一次,只获得最后一次的执行结果。那么这时候我们就可以使用到追加,把它追加进入,而不是直接覆盖重写。
public FileOutputStream(File file, boolean append) : 创建文件输出流以写入由指定的 File对象表示的文件。public FileOutputStream(String name, boolean append) : 创建文件输出流以指定的名称写入文件。
代码
public static void main(String[] args) throws IOException { File file = new File("a.txt"); FileOutputStream FileoutDate = new FileOutputStream(file,true); byte[] b = "abce3".getBytes(); FileoutDate.write(b,2,2); FileoutDate.close(); }
几行代码和前面的相同,只是在FileOutputStream 构造方法里面传入一个ture,表示使用追加模式,该模式默认为false。
2、字节输入流
InputStream抽象类是字节输入流的超类。可以读取字节数据到内存中。
public void close() :关闭此输入流并释放与此流相关联的任何系统资源。public abstract int read() : 从输入流读取数据的下一个字节。public int read(byte[] b) : 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。
(1)、FileInputStream 类
FileInputStream是文件输入流,从文件中读取字节到内存中。
构造方法:
FileInputStream(File file) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。FileInputStream(String name) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
代码:
public static void main(String[] args) throws IOException { File file = new File("a.txt"); FileInputStream fileinputdata = new FileInputStream(file); int read = fileinputdata.read(); System.out.println((char) read); read = fileinputdata.read(); System.out.println((char) read); read = fileinputdata.read(); System.out.println(read); fileinputdata.close(); }
使用read方法读取完后,地址会往后推一位,知道读取到没有,会返回-1。
以上的方法都是读取单个字节,我们可以定义一个字节类型的数值,然后让他每次读取我们指定的长度。
代码:
public static void main(String[] args) throws IOException { File file = new File("a.txt"); FileInputStream fileinputdata = new FileInputStream(file); int len; byte[] b = new byte[2]; while ((len=fileinputdata.read(b))!=-1){ System.out.println(new String(b,0,len)); } fileinputdata.close(); }
这里定义了b变量用来接收每次读取的数据产的长度,然后定义一个len变量,接收每次读取的数据,这里可以直接把赋值放在循环条件里面,如果赋值的变量不等于-1,就一直循环,知道读取到-1,停止循环,前面说到如果没有数据读取会输出返回一个-1,结束循环。
发表评论
最新留言
关于作者
