当前位置: 首页 > news >正文

网站开发涉及内容wordpress小说模版

网站开发涉及内容,wordpress小说模版,网站建设公司软文,乐平市网站建设目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本#xff1a; 第二个带有byte数组的版本#xff1a; 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本#xff1a; 第二个写入整个数组版本#xff1a; …目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本 第二个带有byte数组的版本 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本 第二个写入整个数组版本 第三个版本 三、字符流代码演示 1、Reader read方法 2、Writer write方法 四、三个小练习 1、查找硬盘上文件的位置 2、实现文件复制 3、在目录中搜索但是按照文件内容的方式搜索1和2的小结合 一、流的概念 流是操作系统的概念但是Java / C对其进行了封装流类似水流连绵不断、生生不息。 水流的特点有100ml的水我们可以每次接10ml分10次接完也可以分5ml分20次接完或者直接一次性100ml全部接完。 数据流的特点类似水流假设要读写100字节的数据可以每次读写10字节的数据分10次读写完也可以每次读写5字节分20次读写完或者一次性读写完100字节的数据。 文件流读写文件内容读写文件内容在各种编程语言中都是“固定套路”的。 1、打开文件 2、读/写文件 3、关闭文件 Java对流进行了一系列封装提供了一组类来负责这些工作针对这么多类大体可以风味两种类 字节流以字节为单位每次最少读写一个字节。 字符流以字符为单位每次读写一个字符比如 utf8 中的汉字3个字节就是一个字符每次最少都得读写3个字符。不能一次读写半个字符。 二、字节流代码演示 1、InputStream 从InputStream内部看我们可以发现InputStream是抽象类被abstract修饰如图 所以不能实例化InputStream类但我们可以创建FileInputStream对象它是InputStream的子类如图 InputStream用完要记得关闭文件可以理解成释放文件的相关资源如图 在进程中PCB里面有文件描述符表记录了当前进程都打开了哪些文件这个文件描述符表是由数组 / 顺序表组成的数组里面的每一个元素都代表着是一个结构体里面包含了文件的一些属性每打开一个文件在文件描述符表就会被多占一个位置而文件描述符表的资源是有限的如果不关闭当它被耗尽了后续再打开文件就会失败从而引发其他的逻辑出问题而为啥不给文件描述符表满了就进行扩容操作原因是这操作付出的代价很大对于操作系统内核来说要求的性能是很高的内核任务也很重而扩容本质也就是创造出新的更大规模的数组把旧数组的数据移动到新数组中其中工作量很大如果进行扩容对操作系统的来说在内核任务很重的情况下又要进行其他任务就可能会导致操作系统卡顿现象如果发生这种情况就得不偿失了。 使用finally代码 public class IODemo1 {public static void main(String[] args) throws IOException {InputStream inputStream null;try {inputStream new FileInputStream(./test.txt);} catch (FileNotFoundException e) {throw new RuntimeException(e);}finally {inputStream.close();}} } 可以看到把inputStream放在try代码块外其中因为finally最后要得到InputStream引用要将其设为全局变量才能调用close方法如果在try内代码块new对象就是局部变量了finally里找不到有inputStream的引用。 在java中所以我们可以使用finally但try还提供了另一个版本try with resources用法如下 public class IODemo1 {public static void main(String[] args) throws FileNotFoundException {try(InputStream inputStream new FileInputStream(./test.txt)){} catch (IOException e) {throw new RuntimeException(e);}} } 也是和finally作用一样无论咋样都会执行InputStream.close。其中创建FileInputStream可能会有FileNotFoundException异常因为IOException是FileNotFoundException的父类所以可以直接像上面那样写不用像下面这样写 read方法 read有三个不同参数的版本如图 第一个没有参数的版本 每次只读一个字节并且有返回值上面显示的是int类型其实是byte类型返回的值是读到的该字节的值范围是0~255还有一个特殊的情况如果返回值是-1则说明读取到文本的末尾了没有其他内容了。 以下是代码案例 public class IODemo2 {public static void main(String[] args) {try(InputStream inputStream new FileInputStream(./test.txt)) {while (true) {int n inputStream.read();if(n -1) {break;}System.out.printf(%x , n);}} catch (IOException e) {throw new RuntimeException(e);}} } test.txt的内容是abcdef如图 代码运行结果如下 而abcdef的ascll表16进制分别是以上结果。 第二个带有byte数组的版本 如图该数组是 “输出型参数”byte[] 是引用类型在方法内对数组进行修改方法结束后在方法外部仍然生效本质是看针对 “引用类型修改”还是针对 “解引用修改对象本体”。 以下是代码演示 public class IODemo1 {public static void main(String[] args) {try(InputStream inputStream new FileInputStream(./test.txt)){byte[] buffer new byte[1024];while (true) {int n inputStream.read(buffer);if(n -1) {break;}for (int i 0; i n; i) {System.out.printf(%x , buffer[i]);}}}catch (IOException e) {throw new RuntimeException(e);}} } 上面代码是按照若干个字节读而不是一个一个字节读效率比第一个版本强因为读文件本质是读硬盘这个操作是比较耗时的如果我们读若干个字节放在内存了然后要显示出来其内容的时候是直接在内存访问已经读的若干个字节要比读硬盘快。 而返回值是读了多少个字节它读的时候会尽可能把数组填满但实际情况可能填不满那就能填多少是多少。 执行结果如下 如果我们想显示中文字符如果像上面那样读会读出中文字符的 utf8 的16进制值要怎么搞以下是代码演示 public class IODemo2 {public static void main(String[] args) {try(InputStream inputStream new FileInputStream(./test.txt)){while (true) {byte[] buffer new byte[1024];int n inputStream.read(buffer);if (n -1) {break;}String s new String(buffer, 0, n);System.out.print(s);}} catch (IOException e) {throw new RuntimeException(e);}} }执行结果如下 第三个版本 是写数组的一部分其中off是偏移量而不是开 关如图 搭配Scanner的使用 我们想读文件的内容也可以使用Scanner搭配InputStream使用。 ScannerSystem.in括号里面我们肯定都不陌生这里的System.in本质就是InputStream我们可以把System.in换成InputStream下面是代码演示 public class IODemo8 {public static void main(String[] args) {try(InputStream inputStream new FileInputStream(./test.txt)) {Scanner scanner new Scanner(inputStream);while (scanner.hasNext()) {String s scanner.next();System.out.println(s);}} catch (IOException e) {throw new RuntimeException(e);}} } 执行结果 2、OutputStream write方法 如图下面是三个不同参数版本 第一个版本是一次写一个字节第二个版本是一次写整个数组第三个版本是写数组的一部分它们的返回值都是void返回空。 第一个版本 代码如下 public class IODemo4 {public static void main(String[] args) {try(OutputStream outputStream new FileOutputStream(./test.txt)) {outputStream.write(97);outputStream.write(98);outputStream.write(99);} catch (IOException e) {throw new RuntimeException(e);}} }执行结果 因为一次写一个字节97 98 99是abc的ASCII值会把原来文件的内容删除重新写入新的内容。 注意就算没有调用write方法执行代码后也会删除指定文件的内容除非创建FileOutputStream是参数加true才能追加写如图 执行下面代码 public class IODemo4 {public static void main(String[] args) {try(OutputStream outputStream new FileOutputStream(./test.txt, true)) {outputStream.write(97);outputStream.write(98);outputStream.write(99);} catch (IOException e) {throw new RuntimeException(e);}} } 结果如下 之前原本有的abc还在又追加写了abc。 第二个写入整个数组版本 代码演示 public class IODemo5 {public static void main(String[] args) {try(OutputStream outputStream new FileOutputStream(./test.txt)) {byte[] buffer {97, 98, 99, 100, 101, 102};outputStream.write(buffer);} catch (IOException e) {throw new RuntimeException(e);}} } 执行结果 byte数组里面放的元素ASCII值是abcdef放入数组就是写入数组里的内容也可以追加写加个true就行了。 第三个版本 写数组的一部分off是偏移量不是开关。 三、字符流代码演示 Reader和Writer的使用方法和字节流的InputStream和OutputStream基本差不多。 1、Reader read方法 如图下面是read方法几个不同参数的版本 和字节流读的不同它是以char为单位进行读的下面用带数组参数的版本演示代码如下 public class IODemo6 {public static void main(String[] args) {try(Reader reader new FileReader(./test.txt)) {while (true) {char[] buffer new char[1024];int n reader.read(buffer);if(n -1) {break;}String s new String(buffer, 0, n);System.out.println(s);}} catch (IOException e) {throw new RuntimeException(e);}} }执行结果 这里有个细节问题一个char类型有2个字节而在utf8中一个中文字符符占3个字节存在char数组的值怎么打印出中文字符 原因在read的时候每次读到的内容都会存进数组中存进数组时读到的内容是按unicode的值存进数组的当这个数组放进String的构造方法时会把unicode的值转回utf的值这个过程是在java内部封装好了的我们人为感知不到。 如果我们把数组内容一个一个读出来代码如下 public class IODemo6 {public static void main(String[] args) {try(Reader reader new FileReader(./test.txt)) {while (true) {char[] buffer new char[1024];int n reader.read(buffer);if(n -1) {break;} // String s new String(buffer, 0, n); // System.out.println(s);for(int i 0; i n; i) {System.out.print(buffer[i]);System.out.print( );}}} catch (IOException e) {throw new RuntimeException(e);}} } 执行结果 “你好你好”这一行就打印不出来了。 2、Writer write方法 如果要追加写就加个true 如图是write方法的几个版本 主要使用带有String参数的版本构造一个字符串直接把字符串作为参数放进write方法中就可以写入那个字符串进文件中。以下是代码演示 public class IODemo7 {public static void main(String[] args) {try(Writer writer new FileWriter(./test.txt)) {String s 你好;writer.write(s);} catch (IOException e) {throw new RuntimeException(e);}} } 执行结果把你好写进文件中了。 四、三个小练习 以下是文件路径相关信息 这里需要使用到递归是遍历一遍树也就是所有的文件都要遍历一遍看是否符合要求这里不存在前中后遍历的情况因为该树是N叉树。 1、查找硬盘上文件的位置 要求给定一个文件名去指定的目录中进行搜索找到文件名匹配的结果并打印出完整的路径。 代码演示 //D:/desktop/file/javaEE/JavaEECode/test public class IODemo9 {public static void main(String[] args) {//1、输入必要信息Scanner scanner new Scanner(System.in);System.out.println(请输入要查找的文件);String fileName scanner.next();System.out.println(请输入要搜索的目录);String rootPath scanner.next();File file new File(rootPath);//判断输入的目录是否合法if(!file.isDirectory()) {//不是目录System.out.println(输入的目录不合法);return;}//2、在目录下找我们给定文件名看是否存在使用递归的方式进行搜索scanDir(file, fileName);//知道递归的起点还需要知道要查询的文件名}private static void scanDir(File rootFile, String fileName) {//1、把所有子目录都列出来File[] files rootFile.listFiles();//递归结束条件if(files null) {//空目录直接返回return;}//2、遍历files判断每一个file文件是目录还是文件for(File f : files) {//记录日志System.out.println(当前遍历到 f.getAbsolutePath());//1、文件判断文件名是不是要查找的文件名if(f.isFile()) {String name f.getName();if(fileName.equals(name)) {System.out.println(找到文件了文件路径 f.getAbsolutePath());}} else if(f.isDirectory()) {//2、目录继续往下递归scanDir(f, fileName);} else {// 这个 else 暂时不需要}}} }执行结果 2、实现文件复制 要求把一个文件复制一下成为另一个文件。 意思就是把第一个文件以读方式打开依次读取这里的每个字节再读到的内容写入到另一个文件中。 现有的文件 复制cat.jpg文件到cat2.jpg因为没有cat2.jpg所以执行代码后会多出cat2.jpg文件。 代码演示 public class IODemo11 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.println(请输入要复制的源文件);String srcFileName scanner.next();System.out.println(请输入目标文件);String desFileName scanner.next();File srcFile new File(srcFileName);//判断源文件的合法性if(!srcFile.isFile()) {System.out.println(文件不合法);return;}File desFile new File(desFileName);//判断目标文件的合法性不要求文件存在但要求文件路径存在if(!desFile.getParentFile().isDirectory()) {System.out.println(目标路径不合法);return;}//读取要复制文件的每个字节,把读到的每个字节都放到新的文件中try(InputStream srcInputStream new FileInputStream(srcFile);OutputStream outputStream new FileOutputStream(desFile)) {while (true) {byte[] buffer new byte[1024];int n srcInputStream.read(buffer);if(n -1) {break;}outputStream.write(buffer,0 ,n);}} catch (IOException e) {throw new RuntimeException(e);}} }输入内容 执行结果 多出了cat2.jpg文件。 3、在目录中搜索但是按照文件内容的方式搜索1和2的小结合 用户输入一个目录一个要搜索的词遍历文件的过程中如果文件包含了要搜索的词此时就把文件的路径打印出来。 代码演示 public class IODemo13 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.println(请输入要搜索的词);String word scanner.nextLine();System.out.println(请输入要搜索的路径);String rootPath scanner.nextLine();File rootFile new File(rootPath);//判断搜素路径是否合法if(!rootFile.isDirectory()) {System.out.println(输入的搜素路径不合法);return;}//遍历每一个文件如果是普通文件就判断文件内容里面有没有我们要搜索的词scanDir(rootFile, word);}private static void scanDir(File rootFile, String word) {//把当前目录都列出来File[] files rootFile.listFiles();if(files null) {return;}for(File f : files) {System.out.println(当前遍历到: f.getAbsolutePath());//是普通文件判断文件内容里面有没有我们要搜索的词if(f.isFile()) {//把文件内容一个字节一个字节的读出来构成字符串在判断字符串里面有没有要搜索的词searchInFile(f, word);} else if(f.isDirectory()) {//是目录继续递归scanDir(f, word);} else {//这个不需要处理}}}private static void searchInFile(File f, String word) {try(InputStream inputStream new FileInputStream(f)) {StringBuilder stringBuilder new StringBuilder();while (true) {byte[] buffer new byte[1024];int n inputStream.read(buffer);if(n -1) {break;}String s new String(buffer, 0, n);stringBuilder.append(s);}//System.out.println(日志当前读到文本的内容 stringBuilder);if(stringBuilder.indexOf(word) -1) {//没有找到直接return走return;}//文本内容存在要搜索的单词,打印出路径System.out.println(该文本存在要搜索的单词: word 存在于 f.getAbsolutePath());} catch (IOException e) {throw new RuntimeException(e);}} }文件内容如下 代码输入如下 执行结果 都看到这了点个赞再走吧谢谢谢谢谢
http://www.w-s-a.com/news/999575/

相关文章:

  • 企业网站的主要功能可以做众筹的网站有哪些
  • 信阳建设监理协会网站中国建设银行网站网上银行
  • 平台式网站外贸网站建设基础
  • 什么是规划网站手机版的网站制作
  • 网页设计网站作业外贸出口流程步骤
  • 成都网站推广公司排名网站建设首选 云端高科
  • 网站怎么增加流量找网络推广策畿
  • 网站描述范例做网站好看的旅行背景图片
  • 网上商城开发网站建设宣传网站设计
  • 免费的开源网站wordpress建站不好用
  • 陕西建设厅人才网站ai生成logo免费
  • 建设家居网站村建站什么部门
  • 网站建设+青海龙岗区网站建设
  • 精品课网站建设网络公司名字怎么取
  • 化工网站制作用户体验设计案例
  • 如何在微信公众平台上建立微网站垂直门户网站怎么做
  • 关于销售网站有哪些内容品牌网站建设小科6a蚪
  • 免费制作网站平台哪个好湖南企业建网站
  • 灞桥微网站建设株洲百姓网
  • 儿童网站建设互联网怎么学
  • 重庆建网站的公司集中在哪里中煤第五建设有限公司网站
  • 成都网站建设987net运维需要掌握哪些知识
  • 网站建设师个人简介怎么写WordPress头像美化插件
  • 网站优化知识销售管理系统c语言
  • 桂林市网站设计厦门自己建网站
  • 网站seo哪里做的好东莞做网站优化的公司
  • 休闲采摘园网站建设政务公开和网站建设工作的建议
  • 长沙网站建设哪个公司好PHP amp MySQL网站建设宝典
  • 代码编辑器做热点什么网站好湛江网站建设哪家好
  • php网站开发概念网站开发岗位职责任职责格