Java Nio 十六、Java NIO Files

Java文件遍历全解析:从File类到NIO.2,掌握高效目录操作 文件系统操作是编程中的基础技能,其核心原理在于对目录树的访问与遍历。在Java生态中,文件遍历不仅是简单的列表读取,更涉及递归算法、异常处理与性能优化。从传统的java.io.File类到现代的java.nio.file包,技术演进带来了更安全高效的解决方案。例如,使用Files.walkFileTree方法能有效处理符号链接循环问题,而流式API则优化了海量文件遍历时的内存占用。这项技术的工程价值在于支撑了文件搜索、批量处理、系统监控等常见场景。无论是实现一个重复文件查找工具,还是构建文件夹监控服务,稳健 阅读详情

最后更新:2015-04-15

这个Java NIO的Files类(java.nio.file.Files)提供了数个方法中文件系统中操作文件。这个Java NIO的Files类教程将会覆盖这些方法的大部分通用方法的使用。这个类包含了许多的方法,所以也可以核对这个JavaDoc,如果你需要一个没有在这里描述的方法。这个Files类只是可能为了它仍然有一个方法。

这个java.nio.file.Files类同java.nio.file.Path实例一起工作,以至于你在同Files类工作之前需要理解这个Path类。

Files.exists()

这个方法检查给予的这个路径是否在这个文件中。

去创建一个在文件系统不存在的Path实例是可能的。例如,如果你计划创建一个新的目录,你将会首先创建相应的Path实例,然后创建这个目录。

因为Path实例可能指向或者可能没有指向存在这个文件系统的路径,你可以使用Files.exists()方法去决定是否他们是(一旦你需要检查那个)。

这里有一个Java的Files.exists()实例:

Path path = Paths.get("data/logging.properties");

boolean pathExists =
        Files.exists(path,
            new LinkOption[]{ LinkOption.NOFOLLOW_LINKS});

这个例子首先创建一个指向这个路径的一个Path实例,我们去检查他是否存在。第二,这个例子使用Path实例作为第一个参数,调用这个Files.exists()方法。

注意Files.exists的第二个参数。这个参数是一个数组选项,它影响着这个Files.exists是怎么决定文件路径是否存在。在上面的这个例子中,这个数组包括这个LinkOption.NOFOLLOW_LINKS,这个意味着这个Files.exists方法应该不会跟随这个文件系统的符号链接去决定路径是否存在。

Files.createDirectory()

这个方法创建一个来自于Path实例的一个新的目录。这里有一个例子:

Path path = Paths.get("data/subdir");

try {
    Path newDir = Files.createDirectory(path);
} catch(FileAlreadyExistsException e){
    // the directory already exists.
} catch (IOException e) {
    //something else went wrong
    e.printStackTrace();
}


第一行创建了一个将会去创建的一个目录的Path实例。在try-catch块内部的这个Files.createDirectory()方法使用这个path作为一个参数被调用。如果创建一个目录成功,一个执行这个新创建的路径的Path实例被返回。

如果这个目录已经存在了,一个java.nio.file.FileAlreadyEXistsException将会抛出。如果其他的出现错误的话,一个IOException可能会抛出,例如,如果所期望的上级目录,新目录不存在的话,一个IOException会抛出。这个上级目录是你想创建的那个新的目录。因此,它意味着这个新目录的上级目录。

Files.copy()

这个方法拷贝一个文件从一个路径到另外一个。这里有一个例子:

Path sourcePath      = Paths.get("data/logging.properties");
Path destinationPath = Paths.get("data/logging-copy.properties");

try {
    Files.copy(sourcePath, destinationPath);
} catch(FileAlreadyExistsException e) {
    //destination file already exists
} catch (IOException e) {
    //something else went wrong
    e.printStackTrace();
}

首先,这个例子创建了一个源和目的的Path实例。然后这个例子调用了Files.copy()方法,通过这两个Path实例作为参数。这个将会导致通过源路径的文件引用被拷贝到被目录路径的文件引用中。

如果这个目的文件已经存在,一个java.nio.file.FileAlreadyEXistsException将会抛出。如果其他的事情出现错误,一个IOException会抛出。例如,如果拷贝文件的这个目录不存在,将会抛出一个IOException。

覆盖已经存在的文件

强制的Files.copy()去覆盖已经存在的文件是可能的。这里有一个例子展示怎样通过Files.copy()方法去覆盖已经存在的文件:

Path sourcePath      = Paths.get("data/logging.properties");
Path destinationPath = Paths.get("data/logging-copy.properties");

try {
    Files.copy(sourcePath, destinationPath,
            StandardCopyOption.REPLACE_EXISTING);
} catch(FileAlreadyExistsException e) {
    //destination file already exists
} catch (IOException e) {
    //something else went wrong
    e.printStackTrace();
}

注意Files.copy()方法中的第三个参数。这个参数指明如果目的文件已经存在将会覆盖。

Files.move()

这个Java NIO类也包含了一个这样的函数,移动一个文件从一个路径到另外一个路径。移动一个文件就像重命名它一样,移动一个文件既可以移动到不同的目录,还可以同时改变他的名字。是的,这个java.io.File类的renameTo()方法也可以做这个事情,但是现在你也可以在java.nio.file.Files类中做文件移动的功能。

这里有一个例子:

Path sourcePath      = Paths.get("data/logging-copy.properties");
Path destinationPath = Paths.get("data/subdir/logging-moved.properties");

try {
    Files.move(sourcePath, destinationPath,
            StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
    //moving file failed.
    e.printStackTrace();
}

首先源路径和目的路径被创建。这个源路径指向了将要移动的文件,以及整个目的路径指向了这个文件将要移动的目的地。然后Files.move方法被调用了。这个就会导致这个文件将会被移动。

注意这个方法里面的第三个参数,这个参数告诉这个方法将会覆盖目的路径中任何存在的文件。这个参数实际上是可选择的。

如果移动文件失败可能会抛出IOException异常。例如,如果一个文件已经存在目的路径中,并且你遗漏了StandardCopyOption.REPLACE_EXISTING这个选项,或者将要移动的这个文件不存在等等。

Files.delete()

这个方法可以删除一个文件或者一个目录。这里有一个例子:

Path path = Paths.get("data/subdir/logging-moved.properties");

try {
    Files.delete(path);
} catch (IOException e) {
    //deleting file failed
    e.printStackTrace();
}

首先创建一个指向要删除的文件的Path实例。然后调用这个删除的方法。如果因为一些原因(例如文件或者目录不存在)删除失败,一个IOException将会抛出。

Files.walkFileTree()

这个方法包含了可以递归遍历一个目录树的功能。这个方法携带着一个Path实例和FileVisitor作为参数。这个Path实例指向了你想要遍历的目录。这个FileVisitor是中遍历期间被调用。

在我解释这个遍历是如何工作的之前,这里首先有一个FileVisitor接口:

public interface FileVisitor {

    public FileVisitResult preVisitDirectory(
        Path dir, BasicFileAttributes attrs) throws IOException;

    public FileVisitResult visitFile(
        Path file, BasicFileAttributes attrs) throws IOException;

    public FileVisitResult visitFileFailed(
        Path file, IOException exc) throws IOException;

    public FileVisitResult postVisitDirectory(
        Path dir, IOException exc) throws IOException {

}

你不得不自己去实现FileVisitor接口,以及传递你实现的一个实例到walkFileTree方法中。你的FileVisitor实现的每一个方法中目录遍历期间的不同时间将会被调用。如果你不想去实现这些所有的方法,你可以继承SimpleFileVisitor类,这个类里面包含了FileVisitor接口所有方法的默认实现。

这里有一个walkFileTree的例子:

Files.walkFileTree(path, new FileVisitor<Path>() {
  @Override
  public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
    System.out.println("pre visit dir:" + dir);
    return FileVisitResult.CONTINUE;
  }

  @Override
  public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
    System.out.println("visit file: " + file);
    return FileVisitResult.CONTINUE;
  }

  @Override
  public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
    System.out.println("visit file failed: " + file);
    return FileVisitResult.CONTINUE;
  }

  @Override
  public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
    System.out.println("post visit directory: " + dir);
    return FileVisitResult.CONTINUE;
  }
});

在FileVisitor实现的每一个方法中目录遍历期间的不同时间将会被调用:

这个preVisitDirectory() 方法将会中访问任何目录之前会被调用。这个 postVisitDirectory()方法是中访问目录之后被调用。

这个visitFile()方法是中每一个文件访问期间会被调用,它对于目录是不会被调用的--只是相对文件。这个visitFileFailed()方法一旦访问文件失败将会被调用。例如,如果你没有正确的权限,或者是其他事情出错了。

四个方法中的每一个都返回了一个FileVisitResult 枚举实例。这个枚举实例包含下面四个选项:

  • CONTINUE
  • TERMINATE
  • SKIP_SIBLINGS
  • SKIP_SUBTREE
通过返回的值去决定接下来这个方法应该怎么走。
CONTINUE意味着意味着这个文件将会正常的继续访问下去。
TERMINATE意味着这个文件的访问现在将会终止。
SKIP_SIBLINGS意味着这个文件的访问将会继续,但是不会访问这个文件或者目录的兄弟节点。
SKIP_SUBTREE意味着这个文件的访问将会继续,但是不会访问这个目录的条目。这个值只是如果从preVisitDirectory() 返回就会有这个功能。如果从其他任何方法返回,他将会作为一个CONTINUE被解释使用。

搜索文件
这里有一个walkFileTree方法,它继承了SimpleFileVisitor 去寻找README.txt的文件:
Path rootPath = Paths.get("data");
String fileToFind = File.separator + "README.txt";

try {
  Files.walkFileTree(rootPath, new SimpleFileVisitor<Path>() {
    
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
      String fileString = file.toAbsolutePath().toString();
      //System.out.println("pathString = " + fileString);

      if(fileString.endsWith(fileToFind)){
        System.out.println("file found at path: " + file.toAbsolutePath());
        return FileVisitResult.TERMINATE;
      }
      return FileVisitResult.CONTINUE;
    }
  });
} catch(IOException e){
    e.printStackTrace();
}

递归的删除目录
walkFileTree方法也可以用来删除所有文件的一个目录以及它里面的子目录。如果它是空的,这个Files.delete()方法将只是删除一个目录。通过穿行所有的目录以及删除所有的文件(在visitFile()里面)在每一个目录中,并且删除目录本身之后(在postVisitDirectory()里面),你可以删除一个带有所有子目录和文件的一个目录。这里有一个递归删除目录的一个例子:
Path rootPath = Paths.get("data/to-delete");

try {
  Files.walkFileTree(rootPath, new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
      System.out.println("delete file: " + file.toString());
      Files.delete(file);
      return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
      Files.delete(dir);
      System.out.println("delete dir: " + dir.toString());
      return FileVisitResult.CONTINUE;
    }
  });
} catch(IOException e){
  e.printStackTrace();
}

在Files类里面的额外的方法
这个java.nio.file.Files类包含了很多其他有用的功能,例如像创建符号链接的功能,决定文件大小的功能,设置文件权限的功能等等。你可以去查看这个类的Java文档去获取这些方法的更多信息。

翻译地址:http://tutorials.jenkov.com/java-nio/files.html

Java IO流核心原理与实战:从字节字符流到NIO性能优化 在Java编程中,输入输出(IO)是数据持久化、网络通信和系统交互的基石。其核心抽象“流”(Stream)将数据视为在源与目标间流动的字节或字符序列,通过装饰器模式灵活组合功能。理解字节流与字符流的根本区别——前者处理原始二进制数据,后者专为文本设计并涉及编码解码——是避免乱码和文件损坏的关键。缓冲流通过批量处理减少系统调用,是提升IO性能的通用实践。在需要处理海量数据或高并发连接时,Java NIO提供了基于通道(Channel)和缓冲区(Buffer)的非阻塞模型,有效解决了传统阻塞IO的线程瓶颈。本文 阅读详情

相关推荐

Java Base64图片字符串转File对象:原理、实现与性能优化

Base64编码是一种将二进制数据转换为ASCII字符串的编码方式,其核心原理是通过64个可打印字符安全地表示二进制数据,常用于在文本协议中传输图片、文件等二进制内容。在Java工程实践中,将Base64字符串解码还原为原始二进制数据,并写入文件系统生成File对象,是处理图片上传、数据缓存等场景的关键技术。这一过程不仅涉及编码解码的准确性,更考验对IO流操作、内存管理和临时文件处理等底层机制的理解。掌握高效的Base64解码与文件写入方案,能显著提升后端服务处理多媒体数据的性能和稳定性。本文聚焦于Base

weixin_33769125的博客 431

C# File.Copy 报错:IOException: Could not create file “...xxxxpath...“. File already exists.

IOException: Could not create file "...xxxxpath...". File already exists.

eeem 1550

【异常】在使用Files.copy()方法复制文件时遇到了FileAlreadyExistsException异常,这是因为目标路径已存在同名文件。

通过添加选项,可解决目标文件已存在的异常问题。这是Java NIO提供的标准解决方案,既简洁又高效。

奶爸的编程之路,也就一周冷个三天 461

Java NIO中的Files类的使用

Java NIO中的Files类的使用

m0_73533108的博客 6524

一文读懂Java IO流

IO(Input/Output)流是Java进行输入输出操作的基础,用于在Java程序和外部数据源(如文件、网络连接、内存等)之间传输数据。IO流就像是连接程序与外部世界的管道,通过这个管道可以读取或写入数据。IO流的核心特点流式处理:数据像水流一样从一端流向另一端方向性:要么是输入流(读取数据),要么是输出流(写出数据)连续性:数据是连续不间断传输的阻塞性:传统IO操作会阻塞线程执行,直到操作完成。

yk_dflkg的博客 707

DAC8760高精度数模转换器原理与工业级嵌入式应用

数模转换器(DAC)是工业测控系统中实现数字指令到模拟执行的关键接口,其核心性能由分辨率、线性度、温漂及系统级TUE(总未调整误差)共同决定。DAC8760作为一款16位四象限精密DAC,集成了可编程增益放大器(PGA)、内部基准源与SPI高速接口,支持电压/电流双模输出,显著提升闭环控制精度与硬件适配灵活性。其技术价值在于将高精度模拟前端与数字控制深度耦合,满足PLC、ATE及激光偏置等严苛场景对长期稳定性与多通道同步性的要求。本文围绕DAC8760的寄存器配置、HAL/LL驱动实践、PCB布局规范、现场

weixin_42315569的博客 583

Java中使用Files类的copy()方法复制文件时如何处理文件已存在的情况?

在 Java 里使用Files类的copy()方法复制文件时,若目标文件已存在,默认会抛出异常。不过,你可以通过传入不同的参数来灵活处理文件已存在的情况。

a876106354的博客 732

使用cubeMX生成USB HID设备

本文主要介绍如何使用stm32开发板和cubeMX生成HID设备,供参考。

专注音频,高效工作,快乐生活! 970

java剪切文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇

本文是Java IO总结系列篇的第5篇,前篇的访问地址如下:很多朋友在看我的《java IO总结系列》之前觉得创建文件、文件夹删除文件这些基础操作真的是太简单了。但看了我的文章之后,有小伙伴找到我说:“没想到这么基础的知识里面还有这么多的门门道道,用起来很容易,真的用好也不容易”。哪一个方法用起来简单,哪一个方法在异常处理方面更加健壮,不看我的总结你可能还真的不知道。有兴趣的了解更多的小伙伴可以...

weixin_32902659的博客 2745

立创开源4G+GPS定位系统:基于微信小程序的低成本低功耗追踪方案

本文介绍了一个基于立创开源平台的超小型4G+GPS定位系统方案。该方案采用28mm*28mm主板,集成4G Cat.1通信与GPS定位,通过微信小程序“点灯专家”实现远程追踪管理,具备低成本、低功耗、易于部署的特点,适用于电动车、宠物、资产追踪等多种场景。

weixin_28895791的博客 394

INS/伪距组合导航(2)

伪距惯导组合导航

u014430081的博客 828

java files nio_十六、Java NIO Files

所有文章正文NIO的Files提供了操作系统文件的方法,Files经常和Path协作使用,所以在本文之前了解Path是比较有帮助的。Files.existsexists方法用于检测Path是否存在于文件系统中Path path = Paths.get("data/logging.properties");boolean pathExists = Files.exists(path, new Lin...

weixin_28809647的博客 268

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6064

java files nio_Java NIO(十六) Files

Java NIO Files类(java.nio.file.Files)提供了几种方法来处理文件系统中的文件。 这个Java NIO文件教程将涵盖这些方法中最常用的。 Files类包含许多方法,所以如果你需要一个在这里没有描述的方法,那么也检查JavaDoc。 Files类可能还有一个方法。java.nio.file.Files类与java.nio.file.Path实例一起使用,所以在使用Fil...

weixin_29295541的博客 392

claude code desktop中出现Doesn‘t look like an Anthropic model - expected a gateway model route 解决方案

本文主要介绍了claude code desktop中出现Doesn’t look like an Anthropic model - expected a gateway model route referencing an Anthropic model和Server is busy. Retrying的解决方案,希望能对使用claude code desktop的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

AI训练师三级考证避坑指南|假证辨别+机构套路+OSTA验证

这是最基础的问题,也是最容易忽略的问题。人工智能训练师三级证书本身是有价值的——政府认可的职业技能等级证书、多地紧缺工种补贴、人才引进加分。但正因为有价值,才引来了大量骗子。记住三句话OSTA查不到的证,一分钱都不值声称免考包过的,100%是骗子培训费一次性谈清楚,后续加价直接走人如果你正在考虑考人工智能训练师三级证书,想要从报名到备考到拿证的完整一站式指南,欢迎查看我的付费专栏:📖《人工智能训练师三级·从零到拿证完全指南》99篇系统化内容,覆盖报名、备考、冲刺、拿证全流程。

白话机器学习 1219

Java NIO(十六) Files

Java NIO Files类(java.nio.file.Files)提供了几种方法来处理文件系统中的文件。 这个Java NIO文件教程将涵盖这些方法中最常用的。 Files类包含许多方法,所以如果你需要一个在这里没有描述的方法,那么也检查JavaDoc。 Files类可能还有一个方法。 java.nio...

weixin_34235371的博客 135

uniapp [安卓苹果App端] - 详细实现手机蓝牙连接打印机及打印票据小票/标签/面单/热敏小票订单/快递单等通用兼容适配解决方案,Uniapp对接蓝牙打印机支持各种主流品牌及打印指令,强悍插件

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果app,蓝牙打印机,uniappAPP实现通过蓝牙连接打印机打印,uniapp蓝牙连接打印机,安卓蓝牙打印插件,蓝牙打印机,蓝牙ble低功率及高功率打印机小票、标签、面单打印,手机PDA蓝牙打印插件,连接蓝牙打印机,蓝牙连接,打印文本、图片、条码、二维码,兼容斑马打印机、佳博打印机,TSC打印机,免费蓝牙打印机组件,蓝牙打印条码,蓝牙打印机连接,热敏蓝牙打印机,便携式打印机,打印机搜索不到,连接失败,发送打印命令

🏆 前端领域优质创作者 1万+

java.nio.file.files_Java NIO系列教程(十六) Java NIO Files

weixin_39737947的博客 195

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java六十六: NIO

NIO支持面向缓冲区、基于通道的IO操作; 一套针对标准输入输出,另一套针对网络编程,多用于项目和框架底层; NIO.2,新增了Path、Paths、Files,内置很多方法

开发者 204

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java I/O流核心原理与实战:从字节字符到NIO,打通编程任督二脉

在Java编程中,输入输出(I/O)是数据交换的基础,其核心在于理解数据如何在不同介质间流动。I/O流本质是数据的单向管道,基于装饰器模式设计,允许功能像乐高积木一样灵活组合,这提升了代码的复用性和可维护性。从技术价值看,掌握I/O流不仅能优化程序性能,更是处理文件、网络通信等场景的基石。具体到Java,I/O体系分为处理二进制的字节流和专为文本设计的字符流,而NIO则引入了面向块的通道与缓冲区模型,支持非阻塞操作,显著提升了高并发场景下的效率。本文聚焦**Java I/O流**与**装饰器模式**,通过图

weixin_30781107的博客 407

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

第十六章 java IO设计模式总结

第十六章 java IO设计模式总结

Re_view的博客 251

java传输路径数据流,Java基础第二十六天总结——IO流

目录:一、File类的使用二、IO流原理及流的分类三、节点流(或文件流)四、缓冲流五、转换流六、标准输入、输出流七、打印流八、数据流九、对象流十、随机存取文件流十一、NIO.2中Path、Paths、File类的使用/*---------------------分割线-----------------------*/一、File类的使用File 能新建、删除、重命名文件和目录,但 File 不能访...

weixin_33268492的博客 231

Java基础(2)

九、如何将字符串反转? 使用StringBuilder 或者 StringBuffer 的 reverse() 方法。 StringBuilder sb = new StringBuilder(); sb.append("abcdef"); System.out.println(sb.reverse()); StringBuff...

qq_44768470的博客 205
上一篇: Java Nio 十五、Java NIO Path
下一篇: java并发之CAS
大军001
博客等级 码龄17年 105粉丝 76原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值