File类的使用,InputStream, OutputStream 的用法
File类 字节流 字符流输入输出方法
文章目录
目录
一、File类
File类的使用在JAVA中操作文件~
1.File的属性:
在new是时候输入路径,这个路径是绝对路径和相对路径都可以。
一个是依赖于系统的路径分隔符,String 类型的表示
另外一个是依赖于系统的路径分隔符,char 类型的表示
2.File类的构造方法:
3.File类的方法:
public class IODemo1 {
public static void main(String[] args) throws IOException {
File file=new File("./哲学家.png");
System.out.println(file.getParent()); //返回File对象的父目录文件路径
System.out.println(file.getName()); //返回File对象的纯文件名称
System.out.println(file.getPath()); //返回File对象的文件路径
System.out.println(file.getAbsoluteFile()); //返回File对象的绝对路径
System.out.println(file.getCanonicalPath()); //返回File对象修饰过的绝对路径
}
}
执行结果为:
public class IODemo2 {
public static void main(String[] args) throws IOException {
//相对路径中./可以省略
File file=new File("./hello_word.txt"); //IDEA 的工作目录就是这个项目所在的目录 写相对路径就是以该项目的目录为工作目录
System.out.println(file.exists()); //文件是否存在
System.out.println(file.isDirectory()); //判断当前File的对象代表的文件是不是目录
System.out.println(file.isFile()); //判断File对象代表的是不是一个普通文件
file.createNewFile(); //创建该文件
System.out.println(file.exists()); //文件是否存在
System.out.println(file.isDirectory()); //判断当前File的对象代表的文件是不是目录
System.out.println(file.isFile()); //判断File对象代表的是不是一个普通文件
file.delete(); //删除文件
System.out.println("删除文件");
System.out.println(file.exists()); //判断文件是否存在
}
}
这里注意,如果在IDEA中使用相对路径创建文件,默认就是以该项目的目录为工作目录,在工作目录创建文件~
具体方法就不一一列举啦,代码的注释中就是该方法的作用~
public class IODemo3 {
public static void main(String[] args) {
File file=new File("test-dir/123/456");
file.mkdir(); //创建目录 只能创建一级
file.mkdirs(); //创建多级目录
}
}
这样就可以实现创建目录和多级目录的操作~
list()和listFiles():
public class IODemo4 {
public static void main(String[] args) {
File file=new File("test-dir");
String[] arr=file.list(); //返回 File 对象代表的目录下的所有文件名
System.out.println(Arrays.toString(arr));
File[] arr1=file.listFiles(); //返回 File 对象代表的目录下的所有文件,以 File 对象表示
System.out.println(Arrays.toString(arr1));
}
}
list是使用字符串数字来返回的~
listFiles是使用File对象返回的~
public class IODemo5 {
public static void main(String[] args) {
//重命名
File file=new File("./test-dir");
File dest=new File("./test2");
file.renameTo(dest);
}
}
实现重命名操作啦~
二、文件的基本操作
文件的读写,针对文本文件JAVA提供了一组类,称为字符流(典型代表 Reader(输入流),Writer (输出流)) 读写的基本单位是字符~
针对二进制文件 提供了一组类 称为字节流(典型代表 inputStream,(输入流)OutputStream( 输出流)) 读写的基本单位是字节~
1.inputStream
基本方法: read() :读取一个字节的数据,返回-1代表读取完毕
public class IODemo6 {
//事先在目录中准备了文件,内容为abc
public static void main(String[] args) throws IOException { //使当前对象和硬盘上的文件关联起来
try(InputStream inputStream=new FileInputStream("d:/test.txt")) { //相当于打开文件,如果不存在就抛出异常
while (true) { //try代码块的作用可以在代码块结束的时候自动执行close操作
int ret = inputStream.read(); //读取文件,一次读取一个字节,一直到文件读取结束返回-1 这里使用int接收
if (ret == -1) { // (需要-1来确定是否读取完)
break;
}
System.out.printf("%s\n",ret);
}
}
// inputStream.close(); //有打开就要有关闭操作~ 如果不关闭,文件描述符如果超出上限就会发生严重BUG
}
}
输出的为对应的ASCII码~
如果文本里的内容为中文的 比如 你好世界 那么在再次输出 (因为一次读取一个字节,中文是占用三个字节的,所以读取三个字节相当于一个中文,这里我们使用十六进制输出好看一点)
此处因为是中文,使用的就不是ASCII来对应了,使用UTF-8字符集来翻译
对应的三个字节就为第一个汉字~
2.OutputStream
为字节流写操作~
方法:
wirte(int b):写入要给字节的数据
public class IODemo7 {
public static void main(String[] args) {
try(OutputStream outputStream=new FileOutputStream("d:/test.txt")){
outputStream.write(97); //一个字节一个字节的写入文件
outputStream.write(98);
outputStream.write(99);
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.字符流读取(Reader)
使用方法和上面的方法一样~ 这里就直接写入代码~
public class IODemo8 {
public static void main(String[] args) {
try(Reader reader=new FileReader("d:/test.txt")){ //try可以自动close
while (true){
int ret=reader.read();
if(ret==-1){
break;
}
char ch=(char)ret;
System.out.println(ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
代码基本是一样的,就是读取的单位变成了一次读取一个字符~
4.字符流写(Writer)
public class IODemo9 {
public static void main(String[] args) {
try(Writer writer=new FileWriter("d:/text.txt")){
writer.write("abdc"); //字符流输入
writer.write("efg");
writer.write("hig");
} catch (IOException e) {
e.printStackTrace();
}
}
}
这样就可以实现字符流写入了~
以上介绍本文的全部内容了,如果有任何问题欢迎私信改正或交流哦~欢迎大佬们.感谢您的支持
更多推荐
所有评论(0)