一.创建IO

System.out.println( "*************欢迎进入文件操作系统*************" );
System.out.println( "*************1.创建文件*************" );
System.out.println( "*************2.删除文件*************" );
System.out.println( "*************3.修改文件*************" );
System.out.println( "*************4.创建文件夹*************" );
System.out.println( "*************5.查询文件夹下所有的文件列表*************" );
System.out.println( "*************请选择:*************" ); //获取用户的输入
int choose = input.nextInt();
switch (choose){
case ://创建文件
createNewFile();
break;
case ://删除文件
deleteFile();
break;
case ://修改文件
updateFile();
break;
case ://创建文件夹
mkdirs();
break;
case ://查询文件夹下所有的文件列表
findFileList();
break;
}
}
// 查询文件夹下所有的文件列表
private static void findFileList() {
System.out.println("请您输入查询的文件夹名称:(默认是E:/)");
String fileName = input.next();
//创建File对象
File file=new File("E:/"+fileName);
File[] files = file.listFiles();
int dirNums=;
int fileNums=;
//遍历集合
for (File f:files){
if (f.isDirectory()){
dirNums++;
}
if (f.isFile()){
fileNums++;
System.out.println(f.getName());
}
}
System.out.println("有多少个文件夹?"+dirNums);
System.out.println("有多少个文件?"+fileNums);
} //创建文件夹
private static void mkdirs() {
System.out.println("请您输入创建的文件夹名称:(默认是E:/)");
String fileName = input.next();
//创建File对象
File file=new File("E:/"+fileName);
if (file.mkdirs()){
System.out.println("创建成功");
}else{
System.out.println("创建失败");
}
} //修改文件
private static void updateFile() {
System.out.println("请您输入需要修改文件的名称:(默认是E:/)");
String oldFileName = input.next();
System.out.println("请您输入文件的新名称:(默认是E:/)");
String newFileName = input.next();
//创建File对象
File oldFile=new File("E:/"+oldFileName);
File newFile=new File("E:/"+newFileName);
if(oldFile.renameTo(newFile)){
System.out.println("修改成功");
}else{
System.out.println("修改失败");
} } //删除文件
private static void deleteFile() {
System.out.println("请您输入删除文件的名称:(默认是E:/)");
String fileName = input.next();
//创建File对象
File file=new File("E:/"+fileName);
if (file.exists()){ //文件存在才能删除
boolean flag = file.delete();
if (flag){
System.out.println("文件删除成功!");
}else{
System.out.println("文件删除失败!");
}
}else{
System.out.println("该文件不存在!");
}
} //创建文件
private static void createNewFile() {
System.out.println("请您输入文件的名称:(默认是E:/)");
String fileName = input.next();
//创建File对象
File file=new File("E:/"+fileName);
if (file.exists()){ //文件已经存在
System.out.println("该文件已经存在!");
}else{
try {
boolean flag= file.createNewFile();
if (flag){
System.out.println("文件创建成功!");
}else{
System.out.println("文件创建失败!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

二.流

  1.字节流

//创建输出流和输出流对象
InputStream inputStream=null
OutputStream outputStream=null
try{
inputStream=new InputStream("e:/a.txt");
  //true 代表是否向文件中拼接,不删除之前的内容
outputStream=new OutputStream("e:/a.txt",true);
  //先向文件写入内容
outputStream.write("".getBytes());
  //read 方法将返回0~255之间的数字如果流读到了最后,将返回-1
   int num=0;
   while((num=inputStream.read())!=-1){
    System.out.println((char)num);
  }
}catch(Exception e){
e.printStackTrace();
}finally{
try{
inputStream.close();
outputStream.close();
}catch(Exception e){
e.printStackTrace();
} }

    

  2.字符流

//创建输出流和输入流
Reader reader=null;
Writer writer=null;
try{
  reader=new FileReader("e:/a.txt");
  writer=new FileWriter("e:/a.txt",true);
  writer.write("我是小明");
  writer.flush();
  writer.write("我是小刚");
  writer.write("我是小红");
  writer.close();
  int num=0;
  char[]data=new char{1024};
  StringBuffer sb=new StringBuffer();
  while((num=reader.read(data))!=-1){
    sb.append(data);
  }
  System.out.println(sb.toString())
  catch(Exception e){
    e.prinrStackTrace();
  }finally{
      try {     
        reader.close();
      } catch (IOException e) {
        e.printStackTrace();
      }  
   }
}
 

  3.二进制流

//创建输出流和输入流对象
InputStream inputStream=null;
OutputStream outputStream=null;
DataInputStream dis=null;
DataOutputStream dos=null;
try{
//获取输入流
inputStream=new InputStream("e:/a.txt");
dis=new DataInputStream(inputStream);
//获取输出流
outputStream=new OutputStream("e:/a.txt");
dos=new DataOutputStream(outputStream);
int num=;
while((num=dis.read())!=-){
dos.write(num);//复制
} }catch (Exception e) {
e.printStackTrace();
}finally{
dos.close();
dis.close();
outputStream.close();
inputStream.close();
}

  4.缓冲流

Reader reader=null;
Writer writer=null;
BufferedReader br=null;
BufferedWriter bw=null;
try {
writer=new FileWriter("e:/a.txt",true);
bw=new BufferedWriter(writer); //封装
bw.write("我是小明!");
bw.newLine(); //换行
bw.write("我是小刚!");
bw.flush();
bw.write("我是小红!");
bw.close();
writer.close(); //如果不关闭 后续两句话没法获取
//读取
reader=new FileReader("e:/a.txt");
br=new BufferedReader(reader);//封装
String line=null;
StringBuffer sb=new StringBuffer();
while ((line=br.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
br.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}

  5.序列化和反序列化

static Scanner  input=new Scanner(System.in);
//创建需要的输入和输出流对象
static InputStream inputStream=null;
static OutputStream outputStream=null;
static ObjectInputStream objectInputStream=null;
static ObjectOutputStream objectOutputStream=null; public static void main(String[] args) {
//注册 序列化
//register();
//登录 反序列化
login();
} //注册
private static void register() {
User user=new User();
System.out.println("请输入您的用户名:");
user.setUserName(input.next());
System.out.println("请输入您的密码:");
user.setPassword(input.next()); try {
outputStream=new FileOutputStream("e:/user.txt");
objectOutputStream=new ObjectOutputStream(outputStream);
//把对象输出到文件中
objectOutputStream.writeObject(user);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
objectOutputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} //登录
private static void login() {
try {
inputStream=new FileInputStream("e:/user.txt");
objectInputStream=new ObjectInputStream(inputStream);
//读取对象
User user= (User) objectInputStream.readObject();
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
objectInputStream.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

三.NIO

  1.buffer

    01.buffer   缓冲区:存储的是相同类型的数据集!

      本质是一个可以写入数据,并且从中读取数据的内存!

    02.position:写入或者读取的数据的当前指针

      最大值是:capacity-1

    03.limit:有多少数据可以写或者可以读

      在write模式下,我们的limit和capacity的值一致!

      在read模式下,我们的limit和write模式下的position的值一致

          position变成了0!

    03.capation:缓冲区的最大容量;

//创建一个容量为20的int类型缓冲区
IntBuffer buffer=IntBuffer.allocate();
System.out.println("capacity====>"+buffer.capacity());
System.out.println("position====>"+buffer.position());
System.out.println("limit====>"+buffer.limit());
//创建一个int类型的数组,便于放进缓冲区
int[]nums={,,,,,};
buffer.put(nums);
System.out.println("*************************");
System.out.println("capacity====>"+buffer.capacity());
System.out.println("position====>"+buffer.position());
System.out.println("limit====>"+buffer.limit());
//重设缓冲区 切换到 读模式
buffer.flip();
System.out.println("*************************");
System.out.println("capacity====>"+buffer.capacity());
System.out.println("position====>"+buffer.position());
System.out.println("limit====>"+buffer.limit());
//读取数据
while(buffer.hasremaining()){
System.out.println(buffer.get());
}

2.channel通道

  1.概念

    01.基于缓冲区对数据进行读取或者是写入

    02.通道是双向的,流是单向的

    03.可以异步的读写

  2.常用的实现类

    01.FileChannel:从文件中读写数据

    02.DatagrarmChannel:通过UDP读写网络中的数据

    03.Socketchannel:通过TCP读写网络中的数据

    04.ServerSocketchannel:可以监听新来的TCP连接,每进来一个都会创建一个新的 Socketchannel。

  3.内存映射:就是把文件映射到电脑中的内存中,道过探作内存从而达到操作文件的目的内存中操作速度是最快的

  4.java中读取文件的方式:
    01. RandomAccessFile随机读取,速度最慢82.F ile Inputstream 流的方式读取
    03. BufferReader 缓存的方武读取
    04. MappedByteBuffer内存映射,速度是最快的! ***零*米
  5.内存映射的种模式: MapMode
    01. READ ONLY 对缓冲区的内容只读B

    02.READ WRITE茶对绊冲义的内容读写

    03. PRIVATE 只会对缓冲区的内容进行修改,不会影响到真实的文件
    (通常活用于文件的读取!一般不会涉及到文件的写入)
  6.文件锁:
    01.FileLock基于FileChanne1对 文件捉供锁的功能!
    02.共享锁共享读的操作,只能有个写操作 !防止其他线程获取独占锁!适合读取数据!
    03.独占锁:读写不能同时,只能有一个读或者一个写!适合写数据!
    lock():阻塞

    无参的默认是独占锁:

    有参的为共享锁!
    tryLock():非阻塞

//创建需要读取和写入的文件地址
File filea=new File("d:/a.txt”);
File fileb=new File("d:/b.txt");
//创建输入流和输出流
FileInputStream input=new FileInputStream(filea);
FileOutputStream output=new FileOutputStream(fileb);
//创建输入流和输出流通道
FileChannel inChannel=input.getChannel();
FileChannel outChannel=outputgetChannel();
//创建缓冲区
ByteBuffer buffer=ByteBuffer.allocate(1024); int num=0;
while((num=outchannel.read())!=-1){
buffer.flip();
outChannel.write(buffer);
buffer.close();
}
outChannel.close();
inChannel.close();
output.close();
input.close();

IO和NIO的更多相关文章

  1. java的nio之:java的nio系列教程之java的io和nio的区别

    当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代 ...

  2. 面试题_66_to_75_Java IO 和 NIO 的面试题

    IO 是 Java 面试中一个非常重要的点.你应该很好掌握 Java IO,NIO,NIO2 以及与操作系统,磁盘 IO 相关的基础知识.下面是 Java IO 中经常问的问题. 66)在我 Java ...

  3. 传统IO与NIO的比较

    本文并非Java.io或Java.nio的使用手册,也不是如何使用Java.io与Java.nio的技术文档.这里只是尝试比较这两个包,用最简单的方式突出它们的区别和各自的特性.Java.nio提出了 ...

  4. Java IO 和 NIO

    昨天面试问到了有关Java NIO的问题,没有答上来.于是,在网上看到了一篇很有用的系列文章讲Java IO的,浅显易懂.后面的备注里有该系列文章的链接.内容不算很长,需要两个小时肯定看完了,将该系列 ...

  5. JAVA中IO和NIO的详解分析,内容来自网络和自己总结

    用一个例子来阐释: 一辆客车上有10个乘客,他们的目的地各不相同,当没有售票员的时候,司机就需要不断的询问每一站是否有乘客需要下车,需要则停下,不需要则继续开车,这种就是阻塞的方式. 当有售票员的时候 ...

  6. Nio学习4——EchoServer在IO,NIO,NIO.2中的实现

    堵塞IO实现: public class PlainEchoServer { public void serve(int port) throws IOException { final Server ...

  7. 理解IO、NIO、 AIO

    转载:https://baijiahao.baidu.com/s?id=1586112410163034993&wfr=spider&for=pc nio 同步: 自己亲自出马持银行卡 ...

  8. Java NIO:IO与NIO的区别

    一.概念 NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套N ...

  9. 【杂谈】对IO与NIO的认识

    IO流与NIO块的数据缓存 Java的IO是面向流设计的,通常我们通过IO流读取数据,只能指定读取数据的大小,而不能选择数据读取的起始位置.数据就像流水一样,流过我们的应用,一旦流过就无法回头.除非我 ...

  10. Java提供了哪些IO方式?IO, BIO, NIO, AIO是什么?

    IO一直是软件开发中的核心部分之一,而随着互联网技术的提高,IO的重要性也越来越重.纵观开发界,能够巧妙运用IO,不但对于公司,而且对于开发人员都非常的重要.Java的IO机制也是一直在不断的完善,以 ...

随机推荐

  1. r 随机数

    R软件一个显著的优点是它提供了丰富的随机数发生器,比SAS.Matlab方面很多,比Excel更不知方便到哪里去了.这无疑为统计学.工程学以及寿险精算学提供了很大的方便,比如我们要产生200个服从正态 ...

  2. centos7 防火墙

    1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...

  3. [Node.js] 02 - Read Eval Print Loop

    视频课程:带你入门Nodejs,提及了非常多的后端知识点 发布时间: 2017年10月7日 课程时长:193 分钟 类别:后端 课时:22 npm Resource: npm模块管理器[阮一峰] np ...

  4. SpringBoot------个性化启动Banner设置

    1.添加Banner.txt文件 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ ...

  5. 使用WPF Animated GIF实现GIF图片的播放

    这个类库很方便,也很简单:http://wpfanimatedgif.codeplex.com/ 参考博客:http://blog.csdn.net/gqqnb/article/details/721 ...

  6. file类型input框设置上传相同文件,并都可以触发change事件。

    在使用file类型input框是,删除了第一次上传到文件,再次上传相同文件,无法触发change事件,所以在删除的js上添加如下js代码: document.getElementById('fileU ...

  7. 6 CLR实例构造器

    引用类型构造器 如果我们没有定义实例构造器,那么编译器会为我们默认产生一个无参构造器. 实例对象初始化过程 为实例分配内存: 初始化附加成员,包括方法表指针和SyncBlockIndex变量(我们已经 ...

  8. numpy 中不常用的一些方法

    作者:代码律动链接:https://zhuanlan.zhihu.com/p/36303821来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 挑战 1:引入 numpy ...

  9. day_10 py 字典

    #!/usr/bin/env/python#-*-coding:utf-8-*-'''字典: (就是增加个索引名字,然后归类了一下) infor = {键:值,键:值} 列表存储相同的信息随着列表里面 ...

  10. Linux下部署多个Tomcat(完整)

    Linux下部署多个Tomcat 1.环境:1.1.Centos 5.01.2.apache-tomcat-6.0.18 2.需要解决一下几个问题2.1.不同的tomcat启动和关闭监听不同的端口2. ...