一.创建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. govendor使用

    一,开发端 前提是有一个已经go get过依赖包,并编译成功的项目. $ go get -u github.com/kardianos/govendor $ cd project_dir $ gove ...

  2. Yii2手动下载PHPExcel引入

    步奏一 下载PHPExcel   (自行下载:下载地址http://phpexcel.codeplex.com/releases/view/119187) 步骤二 将PHPExcel解压后的PHPEx ...

  3. 【QT】QPixmap和QImage在QLabel显示一张图像

    #include <QPixmap> void Dialog::on_Button1_clicked() { QPixmap img; img.load("1.bmp" ...

  4. A股ROE连续3年超过15%的股票排名

    R连续3年,12个季度的滚动ROE,都超过15%的股票排名,个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多ROE连续3年超过15%的股 ...

  5. [Tensorflow] RNN - 01. Spam Prediction with BasicRNNCell

    Ref: http://blog.csdn.net/mebiuw/article/details/60780813 Ref: https://medium.com/@erikhallstrm/hell ...

  6. react列表数据显示

    react的列表数据一般是用map循环显示的. 使用map注意:map的回调函数为箭头函数时,后面如果加大括号(箭头函数常规编写),必须要有return才可以,如果箭头函数后面没有大括号(箭头函数简写 ...

  7. 父页面操作嵌套iframe子页面的HTML标签元素

    一个页面A.html使用iframe嵌套一个页面B.html,在A页面写js操作B页面HTML元素,首先要获取到B页面document对象,才能对嵌套页面进行操作 请看一个实例,在A页面写js操作B页 ...

  8. css3整理--box-sizing

    box-sizing语法: box-sizing : content-box || border-box || inherit 参数取值: content-box:此值为其默认值,其让元素维持W3C的 ...

  9. NIO相关概念之Scatter / Gather

    Scatter /Gather 是java NIO中用来对channel的读取或者写入操作的特殊的形式的描述 Scatter(发散) 是指在读操作的时候,从chanel读取到的数据,写入到多个buff ...

  10. zope.interface 库学习一

    由于python没有接口概念,所以zope 提供了个第三方库开源使用,下面简单介绍zope.interface.implementer的使用 直接看例子,下面例子是在twisted里摘录的 接口IRe ...