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
字符流+ 输入流
java IO流(一)的更多相关文章
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java IO流学习总结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- 揭开Java IO流中的flush()的神秘面纱
大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...
- java io流 对文件夹的操作
java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...
- Java IO流题库
一. 填空题 Java IO流可以分为 节点流 和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...
- Java IO流总结
Java IO流分类以及主要使用方式如下: IO流 |--字节流 |--字节输入流 InputStream: int read();//一次读取一个字节 int read(byte[] bys);// ...
- java io流 运行错误时,保存异常到文件里面
java io流 运行错误时,保存异常到文件里面 下面这个实例,运行后,输入数字,为正确,如果输入字符串,则报错,保存错误信息 //运行错误时,保存异常到文件里面 //下面这个实例,运行后,输入数字, ...
- java io流 创建文件、写入数据、设置输出位置
java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...
- java io流 数据流传输
java io流 数据流传输 把这段当公式用就可以了 //数据流传输 import java.io.*; public class Index{ public static void main(Str ...
随机推荐
- python flask 小项目
0 开始之前 网上看了很多教程,都不是很满意,因此自己写一个大型教程,从入门到做出一个比较完整的博客.此次教程不是直接把整个博客直接代码整理出来然后运行一遍就完事,我会从flask的各个模块讲起.所以 ...
- Python扩展库1—numpy
1 数组对象 创建数组 import numpy as np a = np.arange(10) b = np.arange(2,10,1) #[2,10)步长为1 c = np.linspace ...
- CentOS7下-bash: nano: command not found
由于安装的是纯净版系统,运行nano命令是提示没有找到该命令,以下是解决方法,用root权限的用户运行以下命令安装nano: yum install nano 遇到询问时一路点y即可. 安装好后运行: ...
- matlab调用规则变量名eval函数
eval 函数运用!! 经常会遇到matlab里面有些变量命名其实有一样的规律,,但是不像矩阵这些是可以通过循环来获取的,这个时候就可以利用eval语句了: 首先,假设现在有10个名称类似的变量, ...
- Spring 消息
RMI.Hessian/Burlap的远程调用机制是同步的.当客户端调用远程方法时,客户端必须等到远程方法完成之后,才能继续执行.即使远程方法不向客户端返回任何消息,客户端也要被阻塞知道服务完成. 消 ...
- 如何通过创建切片器窗格节省PowerBI报告空间
许多用户在使用Power BI的过程中,都会有这么一个困扰:在Power BI 开发中,切片器一旦过多就会占用非常多的空间.发生这种情况时,您显示数据的页面也会更加小.但另一方面,如果您没有切片器,报 ...
- 设置 SSH 通过密钥登录
我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者 ...
- 20155219 2016-2017-2《Java程序设计》课程总结
20155219 2016-2017-2<Java程序设计>课程总结 (按顺序)每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:做中学深入探讨 预备作业3:虚拟机的安装与学习 ...
- PostgreSQL的目录结构及修改数据目录
initdb 的时候会指定一个 PGDATA 目录,这就是 PostgresQL 存储数据的地方,比如:/var/lib/pgsql/10/data.======显示数据目录1. 进入psqlsudo ...
- plot 函数常用参数