早先,在学习java中的io流时,因为没重视,换乱的看了视频就过了,导致现在做项目时看到文件等操作就头晕,现在有时间了,就重新的学了一遍java的IO流,加深印象吧。
首先说说IO流的概念:
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
IO流的分类:
根据数据的流向可分为:输入流,输出流
根据处理的数据它的类型可分为:字符流与字节流
字符流与字节流中,优先选用字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。
我经常搞混乱,不知道什么时候使用inputstream,什么时候使用outputstream。
接下来的一句话,记住的话就不用迷茫了:对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。
现在就简单的使用一下IO流来加深印象吧
//使用字节流向D盘的hello.txt文件写数据:
public static void main(String[] args) {
//File.separator用来跨平台的书写路径
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
try {
//true则追加内容,false为覆盖内容
OutputStream out=new FileOutputStream(file, true);
String content="woyaojiayou";
byte[]bb=content.getBytes();
for(int i=0;i<bb.length;i++){
out.write(bb[i]);
}
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//使用字节流读取文件内容(没做判断,因此D盘中先要有hello.txt文件)
public static void main(String[] args) {
String fileName="D:"+File.separator+"hello.txt";
File file=new File(fileName);
try {
InputStream is=new FileInputStream(file);
byte[]bb=new byte[(int) file.length()];
for(int i=0;i<bb.length;i++){
bb[i]=(byte) is.read();
}
is.close();
System.out.println(new String(bb));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在创建文件时,我们经常会见到File的mkdir()和mkdirs()方法,那么这两个方法又有什么不同的呢?
写个示例,来更好的了解和记录这两个方法的区别吧
//String path="D:"+File.separator+"main.txt";
File file=new File("D:\\demo\\main");
//两个方法都返回boolean值,当创建成功则返回true,创建失败则返回false
/*mkdir()表示创建最内级的目录,就像上面的文件路径D:\\demo\\main, 它只创建最里面的那个main文件目录,如果demo本身不存在,那么它将创建失败,如果demo存在,它则创建成功
*/
boolean isCreate = file.mkdir(); //如果demo不存在则返回false
boolean bFile1 = file.mkdir();
System.out.println("bFile1:"+bFile1);
/*
* mkdirs() 此方法创建所有目录结构,如目录D:\\demo\\main,它既创建了demo也创建main
* */
boolean bFile2 = file.mkdirs();