file.length()方法返回0字节

今天测试告诉我说上次的图片大小显示为0,而在硬盘上看是有大小的,自己检查代码发现:该文件是自己新生成的,流没有及时关闭,在关闭前调用的file.length()方法,故出现了此问题,但有的时候也可以得到文件大小的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机基础与程序设计知识点全文共9页,当前为第1页。计算机基础与程序设计知识点全文共9页,当前为第1页。计算机内部储存、处理、加工和传输汉字时使用的是汉字机内码. 计算机基础与程序设计知识点全文共9页,当前为第1页。 计算机基础与程序设计知识点全文共9页,当前为第1页。 Cache是为了解决CPU与储存器速度不匹配的问题. 蠕虫病毒是对计算机软件系统造成极大危害,他是一段特制的程序. 在C#中可以标识不同控件的属性是Name. 在C#中不能作为变量名的是long. 关于变量的声明和初始化,语句正确的是double x=13 不属于C#循环的中断语句的是jump语句. 设数组定义为:int[,]a=new int[5,6];,则下列数组元素的引用正确的是a[0,0] 在C#中,不会显示在窗体上的控件是ImageList 如果每隔15S产生一个定时器事件,则Timer的Interval属性应设置为15000 在C#中,如果不希望类被继承,则定义类时要使用关键字sealed 如果某个类程序员属于整个类而不属于类的某一个具体实例,则该程序员前需用修饰符static 在C#中,对文本文件进行读取通常使用StreamReader类 SQL Server 2008实一个关系模型数据库. 在ADO.NET中,用于对数数据源执行SQL命令语句的对象是Command对象. 下列软件工具中,不属于软件开发工具的是 版本控制工具. 主要用于面向对象的开发过程的模型是喷泉模型. 在数据流图中,用圆或圆角矩形表示 加工. 为了提高模块的独立性,模块之间最好是数据耦合. 在微型计算机中,西文字符一般采用 ASCII 码进行编码. 文件型病毒通常寄生在可执行文件中. C#程序的入口函数是Main 函数. 在C#中.注释有两种方法,其中/* */可以进行多行注释. 已知数组mun的定义为:int[]num=new int[5]{5,4,3,2,1};,则num.Length=5 计算机基础与程序设计知识点全文共9页,当前为第2页。计算机基础与程序设计知识点全文共9页,当前为第2页。已知某类的类名Studend,则该类的析构函数名为~Student 计算机基础与程序设计知识点全文共9页,当前为第2页。 计算机基础与程序设计知识点全文共9页,当前为第2页。 .NET绘图时,默认的坐标原点在窗体和控件的 左上 角. 删除名为student表的SQL语句是 DROPTABLE student 软件工程的3个要素是:方法、过程和工具. 基本路径测试属于软件动态测试中的白盒测试技术. 汉字字库中存放的是汉字字形码 属于输出设备的是绘图仪 计算机配置的内存的容量为4GB,其中的4GB是指4×1024×1024×1024B 在Visual Studio.net的集成开发环境中,默认情况下不支持的设计程序语言的Visual Basic 在C#中,不能作为变量名的是char 在C#中,将字符串'He said〞Hello!〞'保存到string变量中,正确的是str=〞He said〞Hello!〞'; 循环体至少执行一次的是do...while循环. 有定义语句:int[,]a=new int[5,6]; 引用正确的是a[3,4] 设数组a的定义为:int[]a=new int[3];,则a所占的存储空间的字节数是12字节 在windows窗体应用程序中,为了将菜单项File中的字符'F'设为助记符〔按Alt+能打开File菜单〕,应将该菜单项的Text属性设置为&File 在Windows窗体应用中,引用列表框ListBox1当前被选中的数据项的语句是ListBox1.Items[ListBox1.Selectedindex] 在C#中,类成员如果不带访问修饰符,则默认的修饰符为private 说法对的是构造函数的名字必须与类名相同. 属于static类的是File类 SQL是标准化的结构化查询语言 ADO.NET的两个主要的核心是.NET Franework数据提供程序和DataSet 在计算机软件的开发和维护过程中遇到一系列严重问题,这种现象被称为软件危机 在下列软件生命周期模型中,具有风险分析的是螺旋模型 计算机基础与程序设计知识点全文共9页,当前为第3页。计算机基础与程序设计知识点全文共9页,当前为第3页。用作软件需求分析工具的是数据流图 计算机基础与程序设计知识点全文共9页,当前为第3页。 计算机基础与程序设计知识点全文共9页,当前为第3页。 软件测试的目的是尽可能的发现软件系统中的错误. 一个字节是由8个二进制位组成的. 7位版本的ASCII码可表示的字符个数为128. C#程序中,定义命名空间的关键字是namespace 每个枚举成员均具有相关联的常量值,默认
ASP.NET中获取指定文件的MD5码 /// <summary> /// 获取指定文件的MD5码 /// </summary> /// <param name="FilePath">文件路径</param> /// <returns>string</returns> private string GetMd5(string FilePath) { byte[] data = File.ReadAllBytes(FilePath); System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] result = md5.ComputeHash(data); string Md5str = BitConverter.ToString(result).Replace("-", ""); return Md5str; } ====================================== .原理剖析: 当某个文件的某段数据改变了,哪怕是变了一个字节,那么这个文件的MD5码就会跟着改变,我的做法非常简单, 就是在文件末尾写入一个UUID码,写入UUID码,这样就确保了这个世界上不会存在MD5一样的文件,除非你 把我这个UUID码拿走去生成这个文件. 关键代码:此处我采用的是边读编写,节省内存,读写完之后,我在末尾将UUID转成byte数组添加到流写入流中,已达到修改文件的目的 ====C# code================= public void CopyToNewFile(string oldFile, string newFile) { //1、创建一个负责读取的流 using (FileStream fsRead = new FileStream(oldFile, FileMode.Open, FileAccess.Read)) { //2、创建一个写入流 using (FileStream fsWrite = new FileStream(newFile, FileMode.OpenOrCreate, FileAccess.Write)) { //3、多媒体文件较大,循环读取 byte[] buffer = new byte[1024 * 1024]; int r = fsRead.Read(buffer, 0, buffer.Length); while (r != 0) { fsWrite.Write(buffer, 0, r);//写入 //返回本次读取实际读取到的字节数 r = fsRead.Read(buffer, 0, buffer.Length); } //通过往源文件末尾添加uuid二进制数据来改变原文件的MD5值 buffer = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString("N")); fsWrite.Write(buffer, 0, buffer.Length); } } } 这种方法理论上支持所有的媒体文件,但不支持文本文件,虽然可以照常运行也可以达到修改MD5的目的,但是你文本内容却已经被我改变了 所以如果你要修改的是文本文件的话,那么这种方法 并不可取,如果是媒体文件,那么没毛病!
检测指定目录是否存在, 检测指定文件是否存在, 如果存在则返回true, 获取指定目录中所有文件列表,获取指定目录中所有子目录列表, 取指定目录及子目录中所有文件列表, 指定目录的绝对路径,检测指定目录是否为空, 检测指定目录中是否存在指定的文件, 若要搜索子目录请使用重载方法., 检测指定目录中是否存在指定的文件, 创建目录, 删除目录, 创建文件, 移动文件(剪贴--粘贴), 复制文件, 根据时间得到目录名 / 格式:yyyyMMdd 或者 HHmmssff, 根据时间得到文件名HHmmssff, 根据时间获取指定路径的 后缀名的 的所有文件, 复制文件夹,检查文件, 如果文件不存在则创建, 删除指定文件夹对应其他文件夹里的文件, 从文件的绝对路径中获取文件名( 包含扩展名 ), 复制文件参考方法,页面中引用, 创建一个目录, 创建一个文件, 并将字节流写入文件, 获取文本文件的行数, 获取一个文件的长度, 单位为Byte, 获取文件大小并以B,KB,GB,TB, 获取指定目录中的子目录列表, 向文本文件写入内容, 向文本文件的尾部追加内容, 将现有文件的内容复制到新文件中, 将文件移动到指定目录, 从文件的绝对路径中获取文件名( 不包含扩展名 ), 从文件的绝对路径中获取扩展名 以上每一行为一个方法, 例子如下: #region 清空指定目录 /// /// 清空指定目录下所有文件及子目录,但该目录依然保存. /// /// 指定目录的绝对路径 public static void ClearDirectory(string directoryPath) { directoryPath = HttpContext.Current.Server.MapPath(directoryPath); if (IsExistDirectory(directoryPath)) { //删除目录中所有的文件 string[] fileNames = GetFileNames(directoryPath); for (int i = 0; i < fileNames.Length; i++) { DeleteFile(fileNames[i]); } //删除目录中所有的子目录 string[] directoryNames = GetDirectories(directoryPath); for (int i = 0; i < directoryNames.Length; i++) { DeleteDirectory(directoryNames[i]); } } } #endregion #region 清空文件内容 /// /// 清空文件内容 /// /// 文件的绝对路径 public static void ClearFile(string filePath) { //删除文件 File.Delete(filePath); //重新创建该文件 CreateFile(filePath); } #endregion #region 删除指定目录 /// /// 删除指定目录及其所有子目录 /// /// 指定
ORACLE函数大全 ________________________________________ 作者:[本站编辑] 来源:[CSDN] 浏览:[ ] SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2.CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C -- - 赵 A 3.CONCAT 连接两个字符串; SQL> select concat('010-','88888888')||'转23' 高乾竞电话 from dual; 高乾竞电话 ---------------- 010-88888888转23 4.INITCAP 返回字符串并将字符串的第一个字母变为大写; SQL> select initcap('smith') upp from dual; UPP ----- Smith 5.INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 出现的位置,默认为1 SQL> select instr('oracle traning','ra',1,2) instring from dual; INSTRING --------- 9 6.LENGTH 返回字符串的长度; SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst; NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL)) ------ ------------ ---------------- ------------ --------- -------------------- 高乾竞 3 北京市海锭区 6 9999.99 7 7.LOWER 返回字符串,并将所有的字符小写 SQL> select lower('AaBbCcDd')AaBbCcDd from dual; AABBCCDD -------- aabbccdd 8.UPPER 返回字符串,并将所有的字符大写 SQL> select upper('AaBbCcDd') upper from dual; UPPER -------- AABBCCDD 9.RPAD和LPAD(粘贴字符) RPAD 在列的右边粘贴字符 LPAD 在列的左边粘贴字符 SQL> select lpad(rpad('gao',10,'*'),17,'*')from dual; LPAD(RPAD('GAO',1 ----------------- *******gao******* 不够字符则用*来填满 10.LTRIM和RTRIM LTRIM 删除左边出现的字符串 RTRIM 删除右边出现的字符串 SQL> select ltrim(rtrim(' gao qian jing ',' '),' ') from dual; LTRIM(RTRIM(' ------------- gao qian jing 11.SUBSTR(string,start,count) 取子字符串,从start开始,取count个 SQL> select substr('13088888888',3,8) from dual; SUBSTR(' -------- 08888888 12.REPLACE('string','s1','s2') string 希望被替换的字符或变量 s1 被替换的字符串 s2 要替换的字符串 SQL> select replace('he love you','he','i') from dual; REPLACE('H ---------- i love you 13.SOUNDEX 返回一个与给定的字符串读音相同的字符串 SQL> create table table1(xm varchar(8)); SQL> insert into table1 values('weather'); SQL> insert into table1 values('wether'); SQL>
java编写智能合约_简单的⽤java代码实现智能合约 简单的⽤java代码实现智能合约 简单理解智能合约: 所谓智能合约,从另⼀个⾓度望过去,就是写⼊了不可篡改的电⼦账簿中的,可执⾏但不可篡改的程序代码⽽已。 ⼀、 编写⽣成jar包 ⼆、 通过⽂件流的⽅式读取jar,获取到每个class对象对应的字节数组 1.⾸先获取到jar对应的字节输⼊流 String jarPath = "/nghb/jar/MyFirstDemo.jar"; File file = new File(jarPath); System.out.println("⽂件的长度:"+file.length()); byte [] buffer = new byte[Integer.parseInt(String.valueOf(file.length()))]; FileInputStream fis = new FileInputStream(file); int size = Integer.parseInt(String.valueOf(file.length())); int offset; int read =0; //int result = fis.read(buffer,0,Integer.parseInt(String.valueOf(file.length()))); // 虽然知道了file⽂件的长度,但是还是要⽤for循环把流读到数组中,因为可能存在fis不⼀定会⼀次read完所有数据到字节数组中 for(offset = 0;(read = fis.read(buffer,offset,size-offset)) != -1 && offset < size; offset += read){ ; } 2.根据获取到的字节流输⼊数组,拆分字节流,拆分为jar包中每个类class对象对应的字节流 // JarInputStream专门⽤来处理jar包流的 JarInputStream jis = new JarInputStream(new ByteArrayInputStream(buffer)); Map byteMap = new HashMap(); JarEntry nextEntry = null; while((nextEntry=jis.getNextJarEntry()) != null){ if(!nextEntry.isDirectory() && nextEntry.getName().endsWith(".class")){ // 层层获取到jar包的jarEntry,替换为class对象中的className形式 String name = nextEntry.getName().replaceAll("/",".").replaceAll(".class",""); byte [] classByte = generateByteOfClass(jis); byteMap.put(name,classByte); } } /* * @Author ZDLS * @Description 根据流的⽅式,读⼊jar中的class对象对应的字节流 * @Date 下午 16:44 2021/1/26 0026 * @Param * @return */ private byte [] generateByteOfClass(JarInputStream jarInputStream) throws Exception{ List bufs = null; byte [] result = null; int total = 0; // 整数的最⼤取值 int remaining = 2147483647; int n=0; do{ byte [] buf = new byte[Math.min(remaining,8192)]; int nread = 0; // 跳出for循环的情况有:buf不够⽤,这个时间n为0;流读取完了n的返回值为-1 for(nread=0; (n = jarInputStream.read(buf,nread,Math.min(buf.length - nread,remaining)))>0;remaining -= n){ nread += n; } if(nread > 0){ if(2147483639 - total < nread){ System.out.println("抛出异常"); } total += nread; if(result == null){ result = buf; }else { if(bufs == null){ bufs = new Ar
IO流: Input Output 输入输出流 自己去扩展: 1. 对象序列化和反序列化生成一个 2. 流的种类: io包下 扩展nio包下 1. IO分类: 输入流 输出流 字节流 InputStream(抽象类) OutputStream(抽象类) 字符流 Reader (抽象类) Writer(抽象类) 2.字节流:(重点) * 使用场景: * 1.字节流处理除了文本、文字相关所有的流问题,如,png/jpg/avi/map4/mp3/exe * 2.字符流只处理文本、文字相关(编码乱码问题) * * 1.输入流 abstract class InputStream:这个抽象类是表示输入字节流的所有类的超类。 * | * FileInputStream 子类:文件字节输入流 * 1. 构造方法 * FileInputStream(String name) name:表示(绝对路径、相对路径)文件名 * FileInputStream(File file) * * 2. 普通方法: //1. int read(byte[] b) 从输入流读取一些字节数,并将它们存储到缓冲区 b 。 最常用 * //2. int read() 从输入流读取数据的下一个字节。 //3. int read(byte[] b, int off, int len) 从输入流读取最多 len字节的数据到一个字节数组。 * 2.输出流 abstract class OutputStream:这个抽象类是表示输出字节流的所有类的超类。 * | * FileOutputStream 子类:文件字节输出流 * 1. 构造方法 FileOutputStream(String name) name:表示(绝对路径、相对路径)文件名 FileOutputStream(String name, boolean append) append:表示是否在该文件末尾追加数据,如果为true,表示追加,false,表示从头开始覆盖 * FileOutputStream(File file) FileOutputStream(File file, boolean append) * * 2. 普通方法: //1. void write(byte[] b, int off, int len) 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。 最常用 * //2. void write(byte[] b)将 b.length字节从指定的字节数组写入此文件输出流。 //3. void write(int b) 将指定的字节写入此文件输出流。 3. 注意事项: 1. 必须要关闭IO流,节约资源开销 2. 关闭IO流原则,先开后关 3. IO流工具类的抽取,将所有的关流(字节流和字符流)方法抽取出来,优化代码 4. 字符流:(重点) * 使用场景:使用于处理文本相关的文件 * * Reader 抽象类: * |子类 * InputStreamReader(转换流) * |子类 * FileReader:适用于读取字符相关的文件 * 1. 构造方法: * 1.FileReader(File file) 2.FileReader(String fileName) fileName:文件名(相对路径/绝对路径) * * 2. 读取方法: * 3. int read(char[] c)读取字符到char数组中 最常用 * 2. int read()读取一个字符 * 3. int read(char[] c,int start,int length)读取制定长度的字符到char数组中 * * Writer 抽象类: * |子类 * OutputStreamWriter(转换流) * |子类 * FileWriter:适用于写出字符相关的文件 * 1. 构造方法: * 1.FileWriter(File file) 默认是false 2.FileWriter(File file, boolean append) append:表示是在文件末尾追加还是从头覆盖,如果true追加,false覆盖,默认是false 3.FileWriter(String fileName) 默认是false 4.FileWriter(String fileName, boolean append) fileName:文件名(相对路径/绝对路径) * 2. 写出方法: * 1. public Writer append(CharSequence csq,int start,int end) * 2. public Writer append(char c) * 3. public Writer append(CharSequence csq) * 4. public void write(char[] c) * 5. public void write(String str) * 6. public void write(String str,int start,int end) 5. 乱码问题:(掌握) GBK: 中文2个字节 英文、数字:1字节 UTF-8: 中文3~6个字节 英文、数字:1字节 编码:将字符串转换为字节 * 1. byte[] getBytes() 根据默认字符集将当前字符串转换为字节数组 * 2. byte[] getBytes(String charsetName) UTF-8/GBK * 按照指定的字符集将将当前字符串转换为字节数组 * * 解码:将字节转换为字符 * 1.String(byte[] bytes, int offset, int length) * 根据默认字符集将字节数组中从指定下标开始到指定长度结束的数据转换为字符串 * * 2.String(byte[] bytes, int offset, int length, String charsetName) * 根据指定字符集将字节数组中从指定下标开始到指定长度结束的数据转换为字符串 * charsetName:字符集名 例如 : "GBK"、"UTF-8" 、"ISO-8859-1" * * 不常用 * 3.String(byte[] bytes) 根据默认字符集将字节数组转换为字符串 * 4.String(byte[] bytes, String charsetName) * 根据默认字符集将字节数组转换为字符串 * * 这里会有乱码问题: * 产生的原因: * 1、因为字符集不统一,即编码和解码new String(b,0,read,"gbk")字符集不一致 * 2、因为字节流读取汉字的时候,字节数组长度不够,将一个汉字拆开了 * 解决: * 1. 用字符流用统一的字符集(最常用) * * 浏览器 : UTF-8 * 前台: * HTML :UTF-8 * CSS :UTF-8 * JS、JSP :UTF-8 * * 后台: * java :UTF-8 * * 数据库: * mysql、oracle、DB2 :UTF-8 * * 开发工具:UTF-8 * 2. 文本文件用统一的字符集 且用字符流读取和写出文本相关文件(最常用) * 3. 用一个大的字节数组(一般不用) 6. 转换流:(重点) 目前唯一一个可以设置字符集的流 (简单的理解为包装流,就是将字节流包装以下,方便操作文本相关的文件) * 使用场景: * 别人给提供了字节流,而需要处理文本文件,这时候,就需要用转换流转换一下,更方便处理文本文件 * * 作用:就是一字符流的方式读取或写出文本相关的数据 * * InputStreamReader:将字节输入流包装一下,让其更适合读取文本文件 * 构造方法: * 1.InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。 * 2.InputStreamReader(InputStream in, String charsetName) 创建一个使用指定字符集的InputStreamReader。 * 普通方法: * public int read(char[] cbuf) * int read(char[] cbuf, int offset, int length) * OutputStreamWriter:将字节输出流包装一下,让其更适合写出文本文件 * 构造方法: * 1. OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。 * 2. OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用指定字符集的OutputStreamWriter。 普通方法: void write(char[] cbuf, int off, int len) append(CharSequence csq,int start,int end) 只有转换流可以设置字符集 7. jdk7关流的新方式: 用新结构可以自动关流 前提:该流必须是实现了一个接口 AutoCloseable 语法: try( //只能写创建流的操作,不能写其他业务操作 ){ //可能有异常的代码 }catch(异常类型1 e){ }...不需要finally关流了 8. 缓冲流:(重点)包装流 * 1.概念: 提高读取和写出效率的流 * 2.作用: 提高效率 3.使用场景:以后一律都要使用,以提高效率 建议以后都是用字节或者字符数组的方式复制文件,这样效率最高 * 4. * BufferedInputStream * 字节输入缓冲流构造方法: 1.BufferedInputStream(InputStream

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值