File类:java.io包下与平台无关的文件和目录

  java可以使用文件路径字符串来创建File实例,文件路径可以是绝对路径,也可以是相对路径,默认情况下,相对路径是依据用户工作路径,通常就是运行Java虚拟机所在的路径

  创建File对象后,可以调用File对象的方法来访问操作文件和目录

  1.访问文件名相关方法:

    String getName():返回文件名或路径名(如果是路径,则返回最后一级子路径)

    String getPath():返回路径名

    String getAsolutePath():返回绝对路径

    。。。。。。

  各种文件目录的操作方法

  文件过滤器:list()方法接收FilnameFilter参数,只列出符合条件的文件

  

Java IO流:

  流的分类:(从程序所在内存的角度来分类的)

    输入流:只能从中读数据

    输出流:只能向其中写数据

  

    字节流:操作数据是8位的字节

    字符流: 操作数据是16位的字符

      

    节点流和处理流(典型的装饰设计模式)

      节点流:从一个特定IO设备读写数据的流,称为节点流

      处理流:用于对一个已存在的节点流进行连接和封装,通过封装后的流实现数据读写功能,也被称为高级流/包装流

    InputStream/Reader :所有输入流的基类,前者是字节输入流,后者是字符输入流 读数据(抽象类,无法创建实例)

    OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流 写数据(抽象类,无法创建实例)

    FileInputStream/FileReader FileOutputStream/FileWriter 节点流,直接和指定文件关联

    将节点流包装成处理流就能使用相同的代码读写不同的输入输出设备的数据

    

    InputStream和Reader()

      InputStream:

        int read();从输入流中读取单个字节(字节数据直接转化为int类型)

        int read(byte[] b):从输入流中读取b.legth个字节,返回读取的字节个数

        int read(byte[] b, int off, int len):从流中读取len个字节,存放在b 从off开始存储

      Reder类似只是对象是字符 char

    OutputStream和Write

      类似

    40多个类中,有一些节点流(构造函数的参数是具体的文件,或字符串),还有处理流(构造函数的参数是节点流,或其他已经存在的流)

    

    还有位于JDK其他包下的特殊io流:AudionInputStream访问音频的流

    转化流InputStreamReader():字节输入流转化字符输入流  OutputStreamWriter():字节输出流---》字符输出流

    System.in:标准输入流,是InputStream的实例

    

    推回输入流:PushbackInputStream  PushbackReader 就是unread()方法

    参考:http://blog.csdn.net/ma451152002/article/details/11900917

    重定向标准输入输出:setIn(), setOut(), setErr()

 import java.io.*;
import java.util.*; public class RedirectIn
{
public static void main(String[] args)
{
System.out.println("Hello World!"); try(FileInputStream fis = new FileInputStream("RedirectIn.java"))
{
System.setIn(fis);
Scanner sc = new Scanner(System.in);
sc.useDelimiter("\n");
while(sc.hasNext())
{
System.out.println(sc.next());
}
}
catch(Exception e)
{ }
}
}

    Scanner 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

  java虚拟机进程读写其他进程数据:

    Runtime对象的exec()方法可以运行平台上的其他程序,该方法饭会一个Process对象,代表该程序的子进程,process提供三个方法用于程序和子进程间的通讯

      getErrorStream()

      getInoutStream()

      getOutputStream() 输入输出流在这里思考还还是以Java程序为中心来的(当年老师讲的时候始终没搞明白)

  RandomAccessFile()随机机访问文件的方式,程序可以直接跳转到文件任意的地方来读取数据(可以用来实现多线程断点下载)

  对象序列化:目标是将对象保存到磁盘,或允许在网络中直接传输对象

        机制是把内存的Java对象转换成平台无关的二进制流

    某个对象要支持序列化机制,则他的类要实现下面两个接口之一

      Serializable

      Externalizable(这两个接口无需实现任何方法)

    如果序列化的对象有多个父类,那这些父类要么能序列化,要么有空的构造函数否则反序列化时会抛出异常

  

  反序列化时无需通过构造器初始化对象,但要有对象对应的class文件

  对象引用的序列化:对象的成员包含引用类型,要序列化该对象时,包含的引用类型也必须是可序列化,否则包含该引用类型的对象不能被序列化

  当多个要序列化的对象同时引用了一个对象时,该对象只会序列化一次,(序列化时会检查该对象是否已被序列化过)(会导致一些问题)

  自定义序列化:不希望某些变量序列化,不想在某个实例时递归序列化

         transient关键字修饰解决这个问题

         需要特殊处理的类提供如下的特殊签名的方法实现对序列化和反序列化的完全控制(如何序列化如何反序列化)

           private void writeObject(java.io.ObjectOutputStream out) throws IOException

           private void readObject(java.io.ObjectInputStream in) throws IOException ,ClassNotfoundException

           private void readObjectNoData()throws .......

           writeReplace()实现在序列化可以把要序列化的对象替换成别的对象

         实现自定义序列化的另一种机制:实现Externalizable实现其两个方法

  序列化时Class版本的控制

  

  

  

      

    

    

    

    

    

Java流和文件的更多相关文章

  1. java流和文件 保存字节级数据(写)

    重要的知识点: 流的概念:  从数据源到I/O类的输入流(in)    从I/O类到数据接收器的输出流(out) I/O包含子类较多的有四大家族:InputStream,OutputStream,Re ...

  2. (转载)java基础:关于java流与文件操作

    原文摘自: http://www.blogjava.net/haizhige/archive/2008/08/03/219668.html 1.描述:流是字节数据或字符数据序列. Java采用输入流对 ...

  3. java基础:关于java流与文件操作

    1.描述:流是字节数据或字符数据序列.Java采用输入流对象和输出流对象来支持程序对数据的输入和输出.输入流对象提供了数据从源点流向程序的管道,程序可以从输入流对象读取数据:输出流对象提供了数据从程序 ...

  4. java流、文件以及IO

    读写文件 一个流被定义为一个数据序列.输入流用于从源读取数据,输出流用于向目标写数据. 输入流和输出流的类层次图. FileInputStream FileInputStream用于从文件中读取数据, ...

  5. JAVA 流与文件

    流 InputStream和OutputStream是所有的输入流和输出流的超类.他们两个都是抽象类. read方法和write方法都是阻塞方法,这意味着如果不能里可以写入或者读取,比如因为网络问题, ...

  6. Java——流、文件与正则表达式

    0. 字节流与二进制文件 我的代码 package javalearn; import java.io.DataInputStream; import java.io.DataOutputStream ...

  7. Java流,文件和I/O

    java.io包中包含几乎所有可能永远需要在Java中执行输入和输出(I/ O)类.所有这些数据流代表一个输入源和输出目标. java.io包中的流支持多种数据,如基本类型,对象,本地化的字符等 流可 ...

  8. java流与文件的操作 文件加密

    课后作业 1,源代码 import java.io.*; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttribu ...

  9. JAVA流读取文件并保存数据

    如图有文本如下数据 写方法读取数据 private String[][] getData(){ // 使用ArrayList来存储每行读取到的字符串 ArrayList<String> a ...

随机推荐

  1. luoguP4172 [WC2006]水管局长

    https://www.luogu.org/problemnew/show/P4172 考虑倒序处理所有操作 先把不会被删掉的边加入图中,LCT 维护最小生成树,再倒序插入每一条边,如果边的 ( l, ...

  2. centos6 x64安装elasticsearch5.5.2启动报错

    ERROR: [3] bootstrap checks failed[1]: max file descriptors [4096] for elasticsearch process is too ...

  3. Squid代理服务器(一)——大家所用的游戏代理软件到底为何物?

    一.代理服务器应用场景分析 想当年大学时候宿舍控制网速,苦了我们这帮魔兽党,一到晚上工会活动我们就得和全校上万名学生抢网速,作为坦克的我总是因为网速问题导致团灭,咱也是有自尊的人,一怒之下花300元办 ...

  4. P2645 斯诺克 题解

    P2645 斯诺克 题目背景 镇海中学开设了很多校本选修课程,有体育类.音乐类.美术类.无线电测向.航空航海航天模型制作等,力争使每位学生高中毕业后,能学到一门拿得出手的兴趣爱好,为将来的终身发展打下 ...

  5. 关于hive Metadata 使用 MsSQL

    下面的页面里说明, http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0-Win/bk_installing_hdp_for_window ...

  6. Js屏蔽键盘输入的某些字符,用以部分代替正则表达式

    工作当中用到的:有是,用户会在文本框里输入一些无效的(错误的)内容,比如在手机号中输入#等等,一般使用正则表达式,但是只有点击的时候才会验证,用户体验不好,所以想屏蔽这些按键,让键盘根本打不出来,以下 ...

  7. BZOJ3156 防御准备 斜率优化dp

    Description   Input 第一行为一个整数N表示战线的总长度. 第二行N个整数,第i个整数表示在位置i放置守卫塔的花费Ai. Output 共一个整数,表示最小的战线花费值. Sampl ...

  8. Query on a tree II 倍增LCA

    You are given a tree (an undirected acyclic connected graph) with N nodes, and edges numbered 1, 2, ...

  9. Wormholes 虫洞 BZOJ 1715 spfa判断负环

    John在他的农场中闲逛时发现了许多虫洞.虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前).John的每个农场有M条小路(无向边)连接着N (从1..N标号)块地 ...

  10. 【解决】Linux Tomcat启动慢--Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [236,325] milliseconds

    一.背景 今天部署项目到tomcat,执行./startup.sh命令之后,访问项目迟迟加载不出来,查看日志又没报错(其实是我粗心了,当时tomcat日志还没打印完),一开始怀疑是阿里云主机出现问题, ...