java IO流(一)

一.IO流概述

1 什么是IO流 (流就是通道对象)
IO - Input(输入) Output(输出)
在Java的IO中,流是一个很形象的概念,就像水流一样。
当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。
当程序需要写出数据的时候,就会开启一个通向目的地的流
水流里面流的是水,输入输出流流的是二进制数据!

二.File

(1)何为File

File是java提供的一个用来代表磁盘上的一个实际文件(其实也可以上网络上的一个文件),它是一个存在在内存中的一个对象而已

File 不完全等同 磁盘上的文件
File 只是代表 磁盘上的文件

我们可以用File对象来操作它代表的磁盘文件,如删除,创建,改名。。。。

(2)File的API介绍

1.常量和构造方法
System.out.println(File.separator);//文件路径的分隔符
System.out.println(File.pathSeparator);//Path环境变量的分隔windows ; linux :

File file1 = new File("D:\\corejava\\TestFile.java");
File file2 = new File("D:\\corejava", "TestFile.java");
File file3 = new File(new File("D:\\corejava"),"TestFile.java"); 
2.创建,重命名,移动,删除

createNewFile()-创建一个新的文件
mkdir-创建一个文件夹,但是不能创建层级
mkdirs - 创建层级文件夹
renameTo() - 文件重命名或移动
delete - 删除文件和文件夹

3.判断是文件还是目录

isFile() - 判断是否是文件 a.txt ,b.doc
isDirectory() - 判断是否是目录 (音乐) ,文件夹

4.获取文件名和路径

getName() - 获得文件名
getAbsolutePath() - 获得文件的绝对路径

5.读取权限和时间属性
6.绝对路径和相对路径

绝对路径就是以确切的目录开始
windows确切的目录从盘符开始,例如C:\ D:\
linux的确切的目录就是根目录,就是 /

相对路径
. 当前目录,可以省略,例如a.txt 和 ./a.txt 是一样的
.. 上一级目录

java下的当前目录在哪里??
得看你在哪个目录下运行java命令

(3)文件过滤

list() - ()
listFiles()

list(FilenameFilter) 

listFiles(FilenameFilter)
listFiles(FileFiter)
public class TestFiles8 {
  public static void main(String[] args) {
   File f = new File("c:\\d");
    if (f.isDirectory()) {// 只有是文lenameFilter filter = new TxtFileNameFilter();
    String[] names = f.list(filter);
     for(String name : names){
      System.out.println(name);
    }
    File[] files = f.listFiles(filter);
     for(File file : files){
      System.out.println(file.isFile()+"------->"+file.getAbsolutePath());
    }
     //保留所有le[] dirs = f.listFiles(new DirFileFilter());
     for(File d : dirs){
      System.out.println(d.isDirectory()+" =====> "+d.getAbsolutePath());
    }
   }
 }
}

class TxtFileNameFilter implements FilenameFilter {
  @Override
  public boolean accept(File dir, String name) {

    return name.endsWith(".txt");
 }
}
class DirFileFilter implements FileFilter {
  @Override
  public boolean accept(File file) {

    return file.isDirectory();
 }

}

(4)递归算法

应用:解决数学中的一些问题,阶乘,求斐波那切数列。
java 应用:遍历树都用到递归

注意:递归一定要有一个最终结束的条件。
核心:自己调用自己
没有结束条件的递归错误:
Exception in thread "main" java.lang.StackOverflowError
求阶乘 5!= 5*4*3*2*1
5!=5*4!=5*4*3!=5*4*3*2!=5*4*3*2*1!=5*4*3*2*1

4!=4*3!=
n!=n*(n-1)!

fn(n)
if(n==1){
return 1;
}
return n*fn(n-1)

求斐波那切数列
1 1 2 3 5 8 13 .....
fn(1) = 1
fn(2) = 1
fn(3) = 2 = fn(3-1)+fn(3-2)
fn(4) = 3 = fn(4-1)+fn(4-2)
fn(5) = 5 = fn(5-1)+fn(5-2)
fn(6) = 8 = fn(6-1)+fn(6-2)

fn(n) => n=1 return 1
=> n=2 return 1
= n>2 return fn(n-1)+f(n-2);

public class TestDiGui {
static int i = 0;
public static void go() {
System.out.println("sfdfs");

i++;
System.out.println(i);
if(i>=100){
return;
}
go();
}
public static int fn(int n) { //fn(n) ===>n!
if (n==1) {
return 1;
}
return n*fn(n-1);//n*n!
}

public static void listFileName(File file) {
if (file.isFile()) {
//文件
System.out.println(file.getName());
}else {
//文件夹
System.out.println(file.getName());
File[] files = file.listFiles();
for (File f : files) {
listFileName(f);
}
}
}

public static void listFileName2(String s ,File file) {
s+="-->";
if (file.isFile()) {
//文件
System.out.println(s+file.getName());
}else {
//文件夹
System.out.println(s+file.getName());
File[] files = file.listFiles();
for (File f : files) {
listFileName2(s,f);
}
}
}

public static int boFei(int n) {

if(n==1||n==2){
return 1;
}
return boFei(n-1)+boFei(n-2);
}

public static void main(String[] args) {
// int r = boFei(5);
// System.out.println(r);
//go();
// int r = fn(3);
// System.out.println(r);
// File file = new File("c:\\test");
// listFileName(file);
File file = new File("c:\\test");
listFileName2("" , file) ;
}
}

三.IO流分类

1 三种分类法
按流的方向:输入流和输出流
按数据的大小:字节(byte)流和字符(char)流
按功能分:节点流 和 过滤流(包装流,装饰流,处理流)

2 输入输出流

3 字节流和字符流

4 节点流和过滤流
节点流就是直接接数据源的流(硬盘,网络)

四.IO流类(API)体系

输入:Input Read
输出:Output Write

字节流:以Stream结尾
字符流:以Reader和Writer结尾

节点流:构造方法的参数是一个文件或者其它的数据源
过滤流:构造方法的参数是另外一个流

五.字节流

(1)OutputStream和FileOutputStream

字节流+ 输出

FileOutputStream(FileDescriptor fdObj)
构造方法的讲解网址:
http://www.fengfly.com/plus/view-214059-1.html

(2)InputStream和FileInputStream

字节流+ 输入流

六.字符流

(1)Writer和FileWriter

字符流+输出流
构造方法使用例子的网址:
FileWriter(FileDescriptor fd)
http://www.jb51.net/article/87476.htm

(2)Reader和FileReader

字符流+ 输入流

原文地址:https://www.cnblogs.com/Transkai/p/10357387.html

时间: 2024-10-30 03:22:41

java IO流(一)的相关文章

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

装饰器模式及JAVA IO流例子★★★☆☆

一.什么是装饰模式 通过关联机制给类增加行为,其行为的扩展由修饰对象来决定: 二.补充说明 与继承相似,不同点在于继承是在编译期间扩展父类,而装饰器模式在运行期间动态扩展原有对象: 或者说,继承是对类进行扩展,装饰模式是对对象进行扩展: 三.角色 抽象构件 具体构件 抽象装饰类 具体装饰类 说明:具体构件.抽象装饰类.具体装饰类的共同父类是抽象构件,具体装饰类继承抽象装饰类并在运行期间装饰具体构件: 四.例子 例子说明: 画家接口Painter,为抽象构件,有两个方法,获取画家描述信息及绘画:

java io流(字节流)复制文件

java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ //字符流方式 //FileReader fz = new FileReader("E:/1.txt"); //FileWriter zt = new FileWriter(&qu

【Android】数据存储-java IO流文件存储

1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.SharedPreference 存储以及数据库存储. 1.文件存储 :不对数据作任何处理,将数据原封不动地存储到文件中,适合存储一些简单的文本数据和二进制数据. a.将数据存储到文件中 Context类提供了一个openFileOutput()方法,可以用于将数据存储到文件中.这个方法接收两个参数,第

Java IO流学习总结

Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表. 字节流和字符流的区

Java IO流学习总结(转)

原文地址:http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.   IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符

java io流总结

1.java io 字符串 读取.写入一个例子 package sd; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter; public class MyReadFilezifu { public static void main(String[] args) throws Excep

揭开Java IO流中的flush()的神秘面纱

大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存.这可以通过BufferedOutputStream或BufferedWriter 链接到底层流上来实现. 因此,在写完数据时,flush就显得尤为重要. 例如: 上图中WEB服务器通过输出流向客户端响应了一个300字节的信息,但是,这时的输出流有一个1024字节的缓冲区.所以,输出流就一直等着WEB

java io流(字符流) 文件打开、读取文件、关闭文件

java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ //打开文件 //字符流方式打开 //字符流每次按一个字符读取 FileReader wj = new FileReader("D:/java/kj/javanew/src/Index.java"

java io流 创建文件、写入数据、设置输出位置

java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ /** * 存储为二进制,给计算机看的 */ //创建文件 DataOutputStream sjl = new DataOutputStrea