package 第九周作业1;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.util.Scanner; public class Main { public static void main(String[] args) {
// TODO 自动生成的方法存根 getFileSize01(new File("E:\\第九周\\src\\作业2\\dada1.txt"));
try {
getFileSize02(new File("E:\\第九周\\src\\作业2\\dada1.txt"));
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
try {
getFileSize03(new File("E:\\第九周\\src\\作业2\\dada1.txt"));
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} /* 获取文件大小的方法01:
* 通过文件的length() 方法获取文件大小,这个通常可以应用于本地文件的大小计算
*/
private static long getFileSize01(File file) { System.out.println(file.length());
return file.length();
}
@SuppressWarnings("unused")
/*
* 获取文件大小的方法02:
* 通过FileChannel类来获取文件大小,这个方法通常结合输入流相关,
* 因此可以用于文件网络传输时实时计算文件大小;
*/
private static long getFileSize02(File file) throws IOException { FileInputStream fis = new FileInputStream(file);
FileChannel fc = fis.getChannel();
System.out.println(fc.size());
return fc.size();
} @SuppressWarnings("unused")
/*获取文件大小的方法03:
* FileInputStream的available()方法看可以用于小文件的文件大小计算,
* 因为available()的返回值类型为int型,可能会存在溢出的情况,
* 所以 available()方法计算文件大小不建议使用;
*/
private static int getFileSize03(File file) throws IOException { FileInputStream fis = new FileInputStream(file);
System.out.println(fis.available());
return fis.available();
} }

  

第一个输出文件大小,三种方法学习了一下。引自https://blog.csdn.net/u014143369/article/details/53164791

文件夹大小操作(2018/11/20/22:30加):

import java.io.File;

public class Wenjian {
/**
* 计算文件夹大小
* @param wenjian_Size
*
*/
public void wenjian_Size(File a)
{
long sum=0; File[] files = a.listFiles();
for(int i=0;i<files.length;i++)
{
sum=sum+getFileSize01(files[i]);
}
System.out.println("size: "+sum); }
/**
* 计算文件大小
* @param file
* @return
*/
@SuppressWarnings("unused")
private long getFileSize01(File file) { return file.length();
} }

  

package DaDa_Wenjian;

import java.io.File;
import java.io.IOException; public class dada { public static void main(String[] args) throws IOException {
// TODO 自动生成的方法存根 /* File f1 = new File("E:\\Dada's function library\\src\\DaDa_Wenjian\\dada1.txt");
if(!f1.exists()) {
f1.createNewFile();//如果没有创建一个
}
File f2 = new File("E:\\Dada's function library\\src\\DaDa_Wenjian\\dada2.txt");
if(!f2.exists()) {
f2.createNewFile();//如果没有创建一个
}
F1_F2_copy a= new F1_F2_copy();
a.F1_F2(f1, f2);
*/
File f1 = new File("E:\\Dada's function library\\src\\DaDa_Wenjian"); Wenjian a= new Wenjian();
a.wenjian_Size(f1);
} }

  

第二个实验:加密文件内容

package 第九周作业1;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
//编写一个文件加解密程序,通过命令行完成加解密工作
public class Main1 {
private static final int numOfEncAndDec=0x99;//加密解密密钥
private static int dataOfFile=0;//文件字节内容 public static void main(String[] args) {
File srcFile=new File("E:\\第九周\\src\\第九周作业1\\dada1.txt");//初始化文件
File encFile=new File("E:\\第九周\\src\\第九周作业1\\dada2.txt"); //加密文件
File decFile=new File("E:\\第九周\\src\\第九周作业1\\dada3.txt"); //解密文件 try {
//EncFile(srcFile,encFile); //加密操作
//DecFile(encFile,decFile);//解密操作 EncFile(srcFile,decFile); //加密操作 DecFile(decFile,encFile);
}catch(Exception e) {
e.printStackTrace();
}
}
private static void EncFile(File srcFile,File encFile)throws Exception{
if(!srcFile.exists()) {
System.out.println("source file not exixt");
}
if(!encFile.exists()) {
System.out.println("encrypt file created");
encFile.createNewFile();//若无加密文件,新建一个加密文件
}
InputStream fis=new FileInputStream(srcFile);
OutputStream fos=new FileOutputStream(encFile); while((dataOfFile=fis.read())>-1) {//当读到文件内容时
fos.write(dataOfFile^numOfEncAndDec);//将读出的内容加密后写入
}
fis.close();
fos.flush();
fos.close();
}
private static void DecFile(File encFile,File decFile)throws Exception{
if(!encFile.exists()) {
System.out.println("encrypt file not exixt");
}
if(!decFile.exists()) {
System.out.println("decrypt file created");
decFile.createNewFile();
}
InputStream fis=new FileInputStream(encFile);
OutputStream fos=new FileOutputStream(decFile); while((dataOfFile=fis.read())>-1) {
fos.write(dataOfFile^numOfEncAndDec);
}
fis.close();
fos.flush();
fos.close();
} }

 来源于网络,但是我有另一种方法就是数据与^的操作:

import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner; public class Main2 { public static void main(String[] args) { F1_F2(new File("E:\\第九周\\src\\第九周作业1\\1.txt"), new File("E:\\第九周\\src\\第九周作业1\\2.txt"));
}
public static void F1_F2(File f1,File f2)
{
try
{ //写入f2
FileWriter fw=new FileWriter(f2,false);
PrintWriter pw=new PrintWriter(fw);
//阅读f1
Scanner shuru = new Scanner(new BufferedReader(new FileReader(f1))); while(shuru.hasNext())
{
int i = Integer.valueOf(shuru.next()).intValue(); pw.println((char)(i^20000));//插入行号 } pw.flush();
pw.close();
fw.close(); }
catch(Exception e)
{
System.out.println("错误");
}
}
}

  

把数字变成文字

第三个实验:

感觉超出我的想象,理解不了,但是还是源码奉上

三、编写一个文件分割工具,能把一个大文件分割成多个小的文件
package 文件分割工具;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CutFile {
public static void main(String[] args) {
//调用cutFile()函数 传人参数分别为 (原大文件,切割后存放的小文件的路径,切割规定的内存大小)
cutFile("F:\\测试加密.txt", "F:",10 * 10 * 20);
} private static void cutFile(String src, String endsrc, int num) {
FileInputStream fis = null;
File file = null;
try {
fis = new FileInputStream(src);
file = new File(src);
//创建规定大小的byte数组
byte[] b = new byte[num];
int len = 0;
//name为以后的小文件命名做准备
int name = 1;
//遍历将大文件读入byte数组中,当byte数组读满后写入对应的小文件中
while ((len = fis.read(b)) != -1) {
//分别找到原大文件的文件名和文件类型,为下面的小文件命名做准备
String name2 = file.getName();
int lastIndexOf = name2.lastIndexOf(".");
String substring = name2.substring(0, lastIndexOf);
String substring2 = name2.substring(lastIndexOf, name2.length());
FileOutputStream fos = new FileOutputStream(endsrc + "\\\\"+ substring + "-" + name + substring2);
//将byte数组写入对应的小文件中
fos.write(b, 0, len);
//结束资源
fos.close();
name++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
//结束资源
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

 虽然没有看懂,但是我会尽快理解byte的,来理解这个操作。

感觉文件操作不明白byte

java文件课后动手动脑的更多相关文章

  1. JAVA 数组作业——动手动脑以及课后实验性问题

    JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // ...

  2. java第二次课件课后动手动脑习题整理总结(2019年9月23号)

    一.动手动脑 1 1.题目 2.程序源代码 package yang8; import java.util.Scanner; import java.util.Random; public class ...

  3. java语法基础--动手动脑问题及课后实验问题

    ---恢复内容开始--- 动手动脑: 1:仔细阅读示例:EnumTest.java,运行它,分析运行结果 结果 :枚举类型是引用类型!枚举类型不属于原始数据类型,它的每个具体指都引用一个特定的对象.相 ...

  4. java课堂第一次随机测试和课件课后动手动脑问题解决(2019-9-16 )

    一.课堂测试 1.课堂测试:花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求 (1)减法结果不能为负数 (2)乘法结果不得超过一百,除法结果必须为整数 (3)题目避免重复: (4)可 ...

  5. 11.8java课后动手动脑

    package 动手动脑; import javax.swing.*; class AboutException { public static void main(String[] a) { int ...

  6. java学习(4)——动手动脑

    根据ppt所给的例子,运行的结果如下所示: ppt中出现的第二个动手动脑如下: 代码如下: 其运行结果如下: 作出简单的分析如下:有点类似于if 和else的关系,总是对应try和catch同层中的异 ...

  7. java学习——关于java课件上动手动脑问题简单的分析

    问题一:关于以下的代码为什么会产生错误的问题的简单分析. 第一个动手动脑提供了一下的代码,可以发现,在Foo的这个类中只定义了一个Foo(int)类型的构造函数,在之前的学习工程中,我们并没有接触到j ...

  8. java语言课堂动手动脑

    1 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是 ...

  9. 01-JAVA语言基础——课后动手动脑

    1.一个java类文件中真的只能有一个公有类吗? 请使用Eclipse或javac检测一下以下代码,有错吗? public class Test{    public static void main ...

随机推荐

  1. Web的几种上传方式总结

    问题 文件上传在WEB开发中应用很广泛. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 以下总结了常见的文件(图片)上传的方式和要点处理. 表单上传 这是传 ...

  2. KnockoutJs学习笔记(五)

    作为一名初学者来说,一篇篇的按顺序看官网上的文档的确是一件很痛苦的事情,毕竟它的排列也并非是由浅及深的排列,其中的顺序也颇耐人寻味,于是这篇文章我又跳过了Reference部分,进而进入到具体的bin ...

  3. SQL Server 对字符进行排序(数字类的字符)

    使用的是SQLserver数据库测试,其他数据库类似. 默认排序是按ID进行排序的 select stu_id ,stu_name from student order by stu_id. 现在需要 ...

  4. Windows配置Apache服务器

    下载的Apache版本:httpd-2.4.32-o102n-x64-vc14 简单粗暴式配置: 1.打开\conf\httpd.conf修改第60行和第224行,其中8081是电脑上没有被使用的端口 ...

  5. Java面向对象三大特性

    封装.继承.多态. 1.封装 封装就是将对象的属性和行为特征包装到一个程序单元(即类)中,把实现细节隐藏起来,通过公用的方法来展现类对外提供的功能,提高了类的内聚性,降低了对象之间的耦合性. 2.继承 ...

  6. mongodb实现自增的方法

    前面操作看菜鸟教程 function getNextSequenceValue(sequenceName){ var sequenceDocument = Counter.findOneAndUpda ...

  7. 强大的xargs

    xargs 命令是最重要的 Linux 命令行技巧之一.你可以使用这个命令将命令的输出作为参数传递给另一个命令.例如,搜索 png 文件然后对其进行压缩或者其它操作: find. -name *.pn ...

  8. Kudu原理-kudu的底层数据模型

    Kudu自身的架构,部分借鉴了Bigtable/HBase/Spanner的设计思想.论文的作者列表中,有几位是HBase社区的Committer/PBC成员,因此,在论文中也能很深刻的感受到HBas ...

  9. 如何使用maven进行avro序列化

    maven导入avro: <dependency> <groupId>org.apache.avro</groupId> <artifactId>avr ...

  10. Redis Pubsub命令用法

    一.什么是pub/sub及实现Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能. Redis通过publish和subscribe命令实现订阅和发布的功能. 订阅 ...