技术栈:Java 知识:JCIFS、SMB ---- 引用JCIFS 创建一个maven工程,然后在pom.xml中添加依赖包。最新的是1.3.18。...我把我自己遇到的坑提出来,希望能帮助到其他人。...这里有一个坑,就是用户名和密码包含了%以及其他的特殊字符,会导致验证失败。...(new SmbFileInputStream(smbFile)); 写入文件 写到本地一样和输入一样的,一句话就可以搞定。...import jcifs.smb.SmbFileInputStream; out = new BufferedOutputStream(new FileOutputStream(localFile));
可能有的同学又发出疑问,我平时本地测试的时候没有发现这个问题,为什么部署到线上就出这个提示的呢?...,在循环外关闭 有的同学在循环操作多个文件时,在循环外关闭文件流,实例代码如下: OutputStream out = null; try { for (int i = 0; i < 10; i...正确的操作方式,应该是在循环体内close,别偷懒,实例代码如下: for (int i = 0; i < 10; i++) { OutputStream out = null; try...比如缓存字节输出流BufferedOutputStream就是一个包装流,目的是对字节输出流提供一个缓存区功能,让数据输出效率更高。 在使用到包装流的时候,我们只需要关闭最后面的包装流即可。...五、小结 本位主要围绕【为什么 IO 流必须手动关闭,不能像其他的方法坐等 GC 处理】这个话题进行一次内容的整合和总结,同时也给出了推荐的正确关闭 IO 流的写法。
文章最后有完整测试代码 基本代码如下:(代码注释部分不用看,一步步学习SequenceInputStream用的) import java.io.BufferedInputStream; import...还有一个问题了,为什么我的bis1, bis2, bis3, bis4没有关闭?是不是我忘了? 没忘!!!...然后再关闭SequenceInputStream流,也就是sis.close(); 其实刚刚已经关了bis1, bis2, bis3了,只剩下bis4了,此刻执行到nextStream的第一个if时会把...bis4也关掉,然后in=null;返回---出循环。...完整测试代码: import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader
大家好,又见面了,我是你们的朋友全栈君。 开源包,http://jcifs.samba.org/....JAVA具有天然的平台无关性,使用JAVA可以访问任何类型的服务器或客户机上的共享文件 系统,并且编写的软件产品可以运行于任何平台,因此用JAVA访问共享文件系统在企业应用中具有得天独厚的优势。...JAVA中的CIFS实现 Jcifs是CIFS在JAVA中的一个实现,是samba组织本着linux的精神,负责维护开发的一个开源项 目。这个项目专注于使用java语言对cifs协议的设计和实现。...类似于java.io.File的接口形式,在多线程的工作方式下被 证明是有效而容易使用的。...在JAVA程序中,使用如下方式获得一个远程共享文件的句柄: SmbFile file = new SmbFile(“smb://guest:1234@192.168.3.56/share/a.txt”
但不建议在for循环中用它拼接字符串,因为它的执行效率,比使用+号拼接字符串,或者使用StringBuilder拼接字符串都要慢一些。...BufferedInputStream和BufferedOutputStream创建了可缓冲的输入输出流。...3.减少循环次数 在我们日常开发中,循环遍历集合是必不可少的操作。 但如果循环层级比较深,循环中套循环,可能会影响代码的执行效率。...通常一次数据库操作的过程是这样的: 创建连接 进行数据库操作 关闭连接 而创建连接和关闭连接,是非常耗时的操作,创建连接需要同时会创建一些资源,关闭连接时,需要回收那些资源。...这种做法只能暂时缓解问题,不是一个好的方案,无法从根本上解决问题。 最大的问题是:数据库连接数可以无限增长,不受控制。 这时我们可以使用数据库连接池。
,所以我们要用循环改进 // // 而用循环,最麻烦的事情是如何控制循环判断条件呢?...,用循环改进 // // 但是,我不知道结束条件 // // len = fis.read(bys); // // System.out.println(len); // // len = fis.read...确实通过IO流读取数据,写到文本文件,你读取一个字节,我就写入一个字节,你没有做任何的转换。 * 它会自己做转换。...* 既然是这样的话,那么,java开始在设计的时候,它也考虑到了这个问题,就专门提供了带缓冲区的字节类。...; import java.io.FileInputStream; import java.io.IOException; /* * 注意:虽然我们有两种方式可以读取,但是,请注意,这两种方式针对同一个对象在一个代码中只能使用一个
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!前言 在Java开发语言中,IO流是非常常见的操作。...摘要 本篇文章主要针对Java中的BufferedOutputStream类进行讲解,包括其简介,源代码解析,应用场景案例,优缺点分析,以及类代码方法介绍和测试用例等方面,旨在帮助读者更好地掌握此类的使用方法及其相关知识...,本地测试演示结果如下:案例代码分析: 本段代码演示了使用BufferedOutputStream和BufferedInputStream完成文件的写入和读取的过程。 ...测试结果根据如上测试用例,测试结果如下:代码分析如上测试用例代码演示了如何使用Java的BufferedOutputStream类来写入和读取文件。...全文小结 本篇文章详细介绍了Java中的BufferedOutputStream类,包括其简介、源代码解析、应用场景案例、优缺点分析、类代码方法介绍和测试用例等方面。
Java学习之文件io流篇 0x00 前言 在平时的一些开发中,普遍都会让脚本运行的时候,去存储一些脚本运行结果的数据,例如开发一个爬虫,这时候我们爬取下来的内容,就需要存储到本地,那么这时候就会用到一些操作文件的类...0x02 IO流概述 IO流概述 java里面的io流指的是对一些文件内容做一个输入输出的作用。也就是input和output,对文件进行读取和输入数据的操作。...在程序开发中,有些数据可能没法一次执行获取所有结果,这时候我们如果以上面的方式来循环写入运行结果的话,每次循环就都会被清空一次,只获得最后一次的执行结果。...那么这时候我们就可以使用到追加,把它追加进入,而不是直接覆盖重写。...0x06 缓存流 字节流和字符流每次读写都会访问硬盘,当读写频率增加其访问效率不高 而使用缓存流读取时会将大量数据先读取到缓存中,以后每次读取先访问缓存,直到缓存读取完毕再到硬盘读取,缓存流写入数据也是一样
//这是jdk1.7版本的标准异常处理代码 原理:在try()中创建的流对象必须实现了AutoCloseable这个接口,如果实现了,在try后面的{}(读写代码)执行后就会自动调用流对象的close...quit时就退出 分析: 1.创建键盘录入对象 2.创建输出流对象,关联text.txt文件 3.定义无限循环 4.遇到quit退出循环 5.如果不quit,就将内容写出 6.关闭流 */ public...,调用了自己 StackOverflowError:堆栈溢出错误(内存溢出) 递归:1.不能无限的调用自己,必须有出口 2.必须保证递归调用方法的次数有一定限制 递归在JavaEE...Z方法内部调用A 递归的练习: 递归的代码演示,计算1-n之间的和,使用递归完成 1.使用递归: a.确定规律(分解式子) b.确定出口 递归的代码演示: 计算第100个斐波那契数列的元素的值...()){ System.out.println("我要的是一个文件夹的File,文件的File不行!")
异常的分类: 通过API查看Throwable所知在Java.Lang里面使用是不用导包的它是JAVA语言中所有错误或者异常的超类(父根类); Error : 服务器宕机,数据库崩溃等 Exception...并将该异常的名称,异常的信息以及异常出现的位置打印在了控制台上,同时将程序停止运行 编译期异常和运行期异常的区别: Java中的异常被分为两大类:编译时异常和运行时异常。...注意事项 递归recursion优缺点: 弊端:调用的次数过多容易导致栈内存溢出; 优点:精简代码无序固定设置循环次数; 构造放不能使用递归调用 递归不一定存在返回值(可以有也可以没有) ---- IO...(上面需求1再当前目录下建立的文件),键盘录入数据当遇到quit时就退出 * 分析: * 1,创建键盘录入对象 * 2,创建输出流对象关联需求1再当前目录下建立的文件 * 3,定义无限循环...//demo.txt内容 我和我的祖国一刻也不能分割! b我爱您,祖国! 注意事项: 1.什么情况下使用字符流?什么情况下使用字节流? 字符流也可以拷贝文本文件但不推荐使用.
BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterOutputStream的子类,作为装饰器子类,使用它们可以防止每次读取...现在就可以回答在本文的开头提出的问题: BufferedInputStream和BufferedOutputStream类就是实现了缓冲功能的输入流/输出流。...查看BufferedOutputStream的源代码,发现所谓的buffer其实就是一个byte[]。...1.BufferedOutputStream在close()时会自动flush 2.BufferedOutputStream在不调用close()的情况下,缓冲区不满,又需要把缓冲区的内容写入到文件或通过网络发送到别的机器时...在上面的代码中,我们关闭流的代码是这样写的。
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!...首先使用FileInputStream创建一个输入流,然后使用FileOutputStream创建一个输出流,通过循环读取输入流中的数据,并将其写入到输出流中就可以实现文件的复制。...创建一个字节数组buffer,用于存储读取到的数据。 进入循环,使用in.read(buffer)方法来读取文件的内容,并将读取到的字节数保存在length变量中。...这段代码主要是测试自定义的输入流和输出流类。在主方法中,首先创建一个MyInputStream对象和一个MyOutputStream对象。然后通过循环,从输入流中读取字节,并将其写入到输出流中。...总结 JavaSE输入输出流是Java开发中不可或缺的部分,通过对InputStream、OutputStream、BufferedInputStream和BufferedOutputStream等类的源代码解析
内容概要 Java IO 流的设计不得不让人拍案叫绝,佩服设计者鬼斧天工的手法。 如果你是 Java 初学者,我敢保证第一次接触 Java 的 IO 类,一定会 ”狂晕!”...在 Java 编程的日子中尤其是在网络编程中,几乎离不开 Java 的 IO 流,所以学好和用好它是很有必要的。...开始,我安慰自己,该类是一个抽象类,它的子类肯定重写了该方法。...仔细的你会发现,第一个例子中的代码中并没有调用 flush() 方法,居然可以正常的写入。为什么第二个就不可以呢?还是从源码入手找答案吧!...{ out.flush(); } 即使你在第一个例子的代码后面加上 dos.flush() 结果也是正常的,加与不加是一样的效果,因为它们的父类 flush() 方法均为空,这就是为什么第一个代码的神奇所在
在java(JDK)中我们可以使用ZipOutputStream去创建zip压缩文件,(参考我之前写的文章 使用java API进行zip递归压缩文件夹以及解压 ),也可以使用GZIPOutputStream...所以我们需要使用到第三方库Apache Commons Compress去创建.tar.gz文件。 在pom.xml中,我们可以通过如下的maven坐标引入commons-compress。...如果您阅读完本文觉得对您有帮助的话,请给我一个赞,您的支持是我不竭的创作动力! 一、将两个文件打包到tar.gz 下面的这个例子是将2个文件打包为tar.gz压缩文件。...下文代码中的流操作使用了try-with-resources语法,所以不用写代码手动的close流。...,finish-tar包输出流 tOut.finish(); } } } 将file-a.xml和file-b.txt打包到output.tar文件中,并使用gzip对这个tar
如果使用 java.lang.Thread 类生成一个线程的时候,线程名称为 Thread-(数字) 的形式,这里是resin生成的线程; daemon 线程类型:线程分为守护线程 (daemon) 和非守护线程...我们称被 synchronized 保护起来的代码段为临界区,对应的代码如下: synchronized(obj) { }COPY 当一个线程申请进入临界区时,它就进入了 "Entry Set" 队列中...临界区的设置是为了保证其内部的代码执行的原子性和完整性,但因为临界区在任何时间只允许线程串行通过,这和我们使用多线程的初衷是相反的。...如果在多线程程序中大量使用synchronized,或者不适当的使用它,会造成大量线程在临界区的入口等待,造成系统的性能大幅下降。...处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。
图14 Java完整代码 使用Socket建立了一个服务器,并向连接上该服务器的客户端发送特定文件夹中的文件信息和文件内容。...图17 Java完整代码 通过Socket连接到指定的服务器,并接收服务器发送过来的文件信息和文件内容,保存到本地。...通过循环遍历文件数量fileNumber,分别从输入流中读取文件名和文件长度,并将其保存在对应的数组中,使用fileName[i]=data.readUTF()和fileLength[i]=data.readLong...然后,再次循环遍历文件数量fileNumber,在每一轮循环中,先创建一个BufferedOutputStream对象output,使用FileOutputStream将其绑定到指定路径的文件上。...通过循环读取input中的每一个字节,并将其写入到output中,实现文件的接收和保存。
之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改完以后也能使用, 但是随着前端所传图片的大小越来越大的时候,耗费的时间也在急剧增加,最后测了一下压缩20M的文件竟然需要30...压缩文件的代码如下。...使用Channel 为什么要用Channel呢? 因为在NIO中新出了Channel和ByteBuffer。...这是源码上的描述文字,大概意思就是使用transferTo的效率比循环一个Channel读取出来然后再循环写入另一个Channel好。...Channel的速度差不多的 使用Pipe Java NIO 管道是2个线程之间的单向数据连接。
之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改完以后也能使用,但是随着前端所传图片的大小越来越大的时候,耗费的时间也在急剧增加,最后测了一下压缩20M的文件竟然需要30秒的时间...压缩文件的代码如下。...使用Channel 为什么要用Channel呢?因为在NIO中新出了Channel和ByteBuffer。...这是源码上的描述文字,大概意思就是使用transferTo的效率比循环一个Channel读取出来然后再循环写入另一个Channel好。...使用Pipe Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。其中source通道用于读取数据,sink通道用于写入数据。
领取专属 10元无门槛券
手把手带您无忧上云