JAVA基础复习与总结<七> File类_基本的IO概念_输入输出
File类
1、操作目录
mkdir() 创建目录,必须确保父目录存在,如果不存在,创建失败
mkdirs()
list() 文件:目录字符串形式 ,只返回目录和文件的名称
listFiles() :返回目录和名称的路径
Static listRoots() 根路径
2、绝对路径和相对路径
绝对路径:指文件在硬盘上真正存在的路径。比如:D:\Java\HelloWorld.java
相对路径:指某个文件的路径和别的文件的路径关系。比如在d盘里面有两个文件,路径分别是:D:\Java\HelloWorld.java和D:\Java\images\monkey.png。它们都在d盘的Java文件夹里面。那么monkey.png这个文件的路径相对于HelloWorld.java来说就是\images\monkey.png。
注意:../ 代表向上一级目录。Java相对于图片的相对路径是:../HellloWorld.java.
在windows系统中绝对路径以盘符开头,例如:D:\
在非windows系统中绝对路径以根目录开头: /
在不写盘符或者根目录来直接构建file类的情况下,绝对路径就是在当前的工作空间+String name
3、IO流中解决不同系统的路径问题
IO操作中关于路径有两个常量,而这两个常量在不同的操作系统中可能不同。
1)路径分割符 : ;
2)名称分割符: \\(Windows) /(Mac OS)
路径分割符: File.pathSeparator
名称分割符: File.separator
推荐的路径方式:
path="E:"+File.separator+"xp"+File.separator+"test"+File.separator+"2.jpg";
public static void main(String[] args) {
System.out.println(File.pathSeparator);
System.out.println(File.separator);
//路径表示形式
String path ="E:\\xp\\test\\2.jpg";
path="E:"+File.separator+"xp"+File.separator+"test"+File.separator+"2.jpg";
//推荐方式
path="E:/xp/test/2.jpg";
}
}
4、File类的应用
1)遍历目录下的文件
/**
* mkdir() 创建目录,必须确保父目录存在,如果不存在,创建失败
* mkdirs() 创建目录,如果父目录链不存在,一同创建
* list() 文件:目录名字符串形式
* listFiles():过滤器,测试指定文件是否在某目录中
* Static listRoots() 根路径
*/
import java.io.File;
import java.io.FilenameFilter;
public class TestFile {
public static void main(String[] args ){
String path ="/Users/qianjiapeng/Desktop";
File src = new File(path);
if(src.isDirectory()){ //存在并且为目录
System.out.println("=======子目录;文件名=======");
String[ ] subNames = src.list(); //.list()方法存储的是文件名
for(String temp:subNames){
System.out.println(temp); //将该目录下的文件的名称进行了输出
}
System.out.println("========子目录;文件File对象========");
File[] subFiles = src.listFiles(); //listFiles()方法返回的是文件,
// 因此在遍历文件夹以及子文件夹中所有文件时必须使用listFiles()方法,可以用作递归
for(File temp:subFiles){
System.out.println(temp);
}
System.out.println("========子文件.java对象========");
//命令设计模式
subFiles = src.listFiles(new FilenameFilter() {
@Override
/*
dir代表的就是
*/
public boolean accept ( File dir, String name ) { //重写了此方法,dir是父路基,name是子文件名
// System.out.println(dir.getAbsolutePath());
return new File(dir,name).isFile()&&name.endsWith(".txt"); //在父路径下面找到是文件并且符合命名要求的文件
}
});
for(File temp:subFiles){
System.out.println(temp.getAbsolutePath());
}
2)递归实现遍历目录下的文件与子文件
/**
* 输出子孙级目录;文件的名称(绝对路径)
* 1、listFiles()
* 2、递归
*/
public class TestFIle2 {
public static void main(String[] args){
String path = "/Users/qianjiapeng/Desktop";
File parent = new File(path );
//printName(parent);
//输出所有路径下的所有文件夹
File[] roots = File.listRoots();
System.out.println(Arrays.toString(roots)); //这是一个输出根路径
for (File temp: roots){
printName(temp);
}
}
/**
* 输出路径
*/
public static void printName(File src){ //一个递归方法
if(null== src || !src.exists()){
return;
}
System.out.println(src.getAbsolutePath());
if(src.isDirectory()){ //如果是文件夹
for(File sub:src.listFiles()){
printName(sub);
}
}
}
}
IO流
一、概念:
流:流动、流向,从一端移动到另一端。从源头流向目的地。
常见的数据源:程序与文件操作,或者数组,或者网络连接、数据库。以程序为中心。
二、IO流主要用来处理设备间的数据传输
分类:
1、按照流向分类:输入流、输出流。
2、按照操作类型分类:
字节流:二进制,可以处理一切文件。包括纯文本、doc、音频、视频等等。
字符流:只能处理纯文本。
3、按照功能来分:
节点流:包裹源头的。
处理流:增强功能,提高性能。
三、字符流与字节流(重点)与文件(都是以程序为中心的)
1、字节流:
输入流:InputStream
方法:read(byte[ ] b) 、read(byte[ ] b, int off ,int len ) 、 close();
FileInputStram();
输出流:OutputStream
方法:write(byte[ ] b) 、write(byte[ ] b, int off, int len )、close()、flush( );
FileOutputStream();
2、字符流:
输入流:Reader
方法:read(char[ ] cbuf) 、read(char[ ] cbuf,int off, int len)、close( );
输出流:Writer
方法:write(char[ ] cbuf )、write(char[ ] cbuf ,int off, int len)、flush()、close( );
1)向文本文件中写出内容
public class FileOutputTest {
public static void main(String[] args){
FileOutputStream fos = null;
try {
//如果该文件不存在,则会自动创建一个。如果有则直接写入
//如果不传true则原本文件的文件内容被覆盖,传入true则在原来的内容后面继续写
//在开发中文件分割符最好不要直接写/。
fos = new FileOutputStream("/Users"+File.separator+"qianjiapeng/IdeaProjects/Java300/src/TestIO/learn2.txt",true);
String meg = "Hello World!";
fos.write(meg.getBytes());
fos.write("\n".getBytes());
2)FileInputStream读取文件
/**
* FileInputStream读取文件
*/
public class Int_Out {
public static void main (String[] args){
FileInputStream fis = null;
try {
//绝对路径
fis = new FileInputStream("/Users/qianjiapeng/IdeaProjects/Java300/src/TestIO/learn.txt");
// System.out.println(fis.read()); //这里打印的是ASCII码。 .read方法,在读取了一个之后将会将游标自动指向下一个
//System.out.println(fis.read());
//System.out.println(fis.read());
//System.out.println(fis.read());
//读取完毕之后会返回-1 ,可以考虑用循环来读取
//使用循环来读取
//每次在硬盘上读一个字节,效率不高
// int temp;
//while ((temp = fis.read())!= -1){
// char c = (char)temp;
// System.out.print(c);
// }
//相对路径,系统会从项目的根目录开始读取
//fis = new FileInputStream("learn.txt");
//定义byte数组告诉系统一次读取几个字节,减少内存和硬盘键的通信,可以提高效率
byte[] arr = new byte[23];
int temp;
//有参的read方法返回的int值是读取了几个字节
while ((temp=fis.read(arr))!=-1){
System.out.println(new String(arr,0,temp));
}
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
try {
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
//要捕获一个文件不存在的异常和输入输出异常
}
}
四、操作
1、举例:搬家 读取文件
1)关联房子 建立与文件联系
2)选择搬家 选择对应流
3)搬家 文件的读取或写出
a) 卡车大小 数组大小
b) 运输 读取、写出
4)打发over 释放资源
2、操作
1)建立联系
2)选择流
3)操作
4)释放资源
InputStream、OutputStream、Writer、Reader都是抽象类。
/**
* 1、建立联系 File对象目的地
* 2、选择流 文件输出流 OutputStream FileOutputStream
* 3、操作 : write() +flush()
* 4、释放资源:关闭
*/
public class Output_Read {
public static void main(String[] args){
// * 1、建立联系 File对象 目的地
File dest = new File("/Users/qianjiapeng/Desktop/2.txt");
// * 2、选择流 文件输出流 OutputStream FileOutputStream
OutputStream os =null;
//以追加的形式写出文件
try {
os = new FileOutputStream(dest,true); //后面是true表示是追加,否则就是覆盖
//3、操作
String str = "good\r\n";
//字符串转字节数组
byte[] data = str.getBytes();
try {
os.write(data,0,data.length);
os.flush(); //强制刷新出去
} catch (IOException e) {
e.printStackTrace();
System.out.println("文件写出失败");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件未找到");
}finally {
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("关闭输出流失败");
}
}
}
}
}
public class Read_Output {
public static void main ( String[] args ) {
//1、建立联系、File对象
File src = new File("/Users/qianjiapeng/Desktop/2.txt");
InputStream is = null; //因为待会要对这个操作进行关闭,因此在外面定义从而提升作用域
try {
try {
is = new FileInputStream(src);
//3、操作,不读读取 ,相当于缓冲数组
byte[] car = new byte[100];
int len = 0; //接收实际读取的大小
//循环读取
while (-1 != (len = is.read(car))) {
//read()操作读取完后会返回-1,判断是否为-1就可以结束读取了
//输出字节数组转成字符串
String info = new String(car,0,len);
System.out.println(info);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("文件不存在");
} catch (IOException e) {
e.printStackTrace();
System.out.println("读取文件失败");
}
}finally {
//4、释放字节
if(is!=null){ //如果文件本身就不存在,那么也就没有关闭的必要了
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("关闭文件输入流存在");
}
}
}
}
}
}
System.out.println(src.getAbsolutePath());
if(src.isDirectory()){ //如果是文件夹
for(File sub:src.listFiles()){
printName(sub);
}
}
}
}
JAVA基础复习与总结<七> File类_基本的IO概念_输入输出的更多相关文章
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- Java基础14-缓冲区字节流;File类
作业解析 阐述BufferedReader和BufferedWriter的工作原理, 是否缓冲区读写器的性能恒大于非缓冲区读写器的性能,为什么,请举例说明? 答: BufferedReader对Rea ...
- JAVA基础复习与总结<五> String类_File类_Date类
String类 .Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicoe字符组成. .Java没有内置的字符串类型,而是在标准java类库中提供了一个预定义的类String, ...
- Java : java基础(2) 集合&正则&异常&File类
Obj 方法: hashCode() 返回内存地址值, getClass() 返回的时运行时类, getName() 返回类名, toString() 把名字和hashCode() 合在一起返回,如果 ...
- 【转载】JAVA基础复习与总结<三> Object类的常用方法
Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类.这里主要总结Object类中的三个常用方法:toString().equ ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
随机推荐
- 自制stm32板子无法烧录程序的问题
自己画的stm32板子一开始出现了无法烧录程序的情况,主要表现为在点击load图标后出现了Stlink connect error!Target dll has been concelled的窗口.在 ...
- DOS:第一天
cd,有时也写作chdir(change directory,改变目录),是在Unix.Windows和DOS操作系统下用于改变工作目录的命令行命令.在Unix的外壳脚本与Windows或DOS的批处 ...
- BCM芯片FP原理及相关SDK数据结构介绍
BCM芯片有几个大的模块: VLAN.L2.L3和FP等几个,其中FP的使用也最为灵活,能解析匹配数据包文的前128字节比特级的内容,动作包括转发.丢弃.结合qos修改相应字段.分配vid.流镜像.流 ...
- Linux基础 - 系统优化及常用命令
目录 Linux基础系统优化及常用命令 Linux基础系统优化 网卡配置文件详解 ifup,ifdown命令 ifconfig命令 ifup,ifdown命令 ip命令 用户管理与文件权限篇 创建普通 ...
- H5富文本编辑器之初始化用于编辑的DOM-遁地龙卷风
使用H5的全局属性contenteditable可以让DOM元素及其子元素变的可编辑 <div contenteditable id="editor"> </di ...
- 为什么ArrayList、LinkedList线程不安全,Vector线程安全
ArrayList源码 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! ele ...
- (一)ORB描述子提取
ORBSLAM2中使用ORB描述子的方法 经典的视觉SLAM系统大体分为两种:其一是基于特征点法的,其二是基于直接法的.那么本文主要就讲特征点法的SLAM. 基于特征点法的视觉SLAM系统典型的有PT ...
- VS2013创建ASP.NET应用程序描述
你的 ASP.NET 应用程序 恭喜! 你已创建了一个项目 此应用程序包含: 显示“主页”.“关于”和“联系方式”之间的基本导航的示例页 使用 Bootstrap 进行主题定位 身份验证,如果选择此项 ...
- vivado中如何使用chipscope
如何使用chipscope 参考: https://www.cnblogs.com/liujinggang/p/9813863.html Xilinx FPGA开发实用教程---徐文波 田耘 1.Ch ...
- windows环境下curl 安装和使用
原文:https://blog.csdn.net/qq_21126979/article/details/78690960?locationNum=10&fps=1 一.curl 安装 cur ...