
正文
java无限分类代码 javaio分类
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
JAVA根据文件后缀名分类文件,并且将文件复制到不同的文件夹,求这段代码的注释
以下都是one by one letter打的,不容易,给点分吧。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.swing.JFileChooser;
/**
* 1.选择被复制的源目录:sourcePath
* 2.选择文件被复制后存放的目标目录:targetPath
* 3.文件后缀名分类文件,并且将文件复制到不同的文件夹
*
*/
public class FileDemo {
/**
* 启动方法
* @param args
*/
public static void main(String[] args) {
/**
* 选择被复制的源目录:sourcePath
*/
File sourcePath = getSourcePath();
/**
* 选择文件被复制后存放的目标目录:targetPath
*/
File outputPath = getOutputPath();
/**
* 执行复制操作
*/
handlePath(sourcePath, outputPath);
}
/**
* 处理文件分类复制
* @param sourcePath
* @param outputPath
*/
private static void handlePath(File sourcePath, File outputPath) {
if (sourcePath == null || outputPath == null) //1.如果没有选择源目录或目标目录,则返回
return;
for (File file : sourcePath.listFiles()) { //2.取得源目录下所有的文件或文件夹,并进行遍历
if (file.isDirectory()) {
//3.如果当前遍历的是文件夹,则使用递归调用,继续处理该文件夹下面的所有文件或文件夹
handlePath(file, outputPath);
} else {
//4.如果当前遍历的是不是文件夹而是文件,那么直接开始copy的操作
//4.1.取得文件的文件名,包含文件后缀名
String fileName = file.getName();
if (fileName.contains(".")) {
//4.2.1.如果该文件有后缀名,即包含“.”点符号,则取得文件的后缀名为:最后一个点符号后面的字符串
String suffix = fileName.substring(fileName.lastIndexOf('.') + 1);
//4.2.2.根据文件最后的输出的目标目录和文件的后缀名,执行copy的操作(因为最后输出格式为按文件的后缀名分类,即最后输出如:pdf目录下面有pdf文件,txt目录下面有txt文件)
copy(file, new File(outputPath, suffix));
} else {
//4.3.如果该文件没有后缀名,即不包含“.”点符号,则直接在文件最后的输出的目标目录下建立“nosuffix”目录,执行copy的操作,将没有后缀名的文件复制到nosuffix目录下
copy(file, new File(outputPath, "nosuffix"));
}
}
}
}
/**
* 单个文件复制操作
* @param sourceFile
* @param targetDir
*/
private static void copy(File sourceFile , File targetDir){
System.out.println("copying " + sourceFile);
//1.如果目标目录不存在,则新建,此处的目标目录为按文件后缀名命名的目录,如pdf目录,txt目录以及nosuffix目录
if(!targetDir.exists()){
targetDir.mkdir();//新建目录
}
try {
//2.将源文件读取到输入流中
FileInputStream fis = new FileInputStream(sourceFile);
//3.按照目标目录和文件名构建文件输出流
FileOutputStream fos = new FileOutputStream(new File(targetDir , sourceFile.getName())) ;
//4.定义缓冲区,大小为102400byte
byte[] buf = new byte[102400];
//5.定义输入流读取到的文件大小,下面会用到
int available = 0;
//6.fis.available():使用输入流fis读取当前文件的大小,将读取到的大小赋值给available
while((available = fis.available()) buf.length){
//7.如果当前读取到的大小available大于定义的缓冲区的大小102400,则用fis.read(buf)方法读取文件。
//此时,缓冲区buf会被完全读满,即源文件的前102400 byte的数据都会被读取到buf中,
//fis下一次读取就会从102401 byte开始读,即文件读取的开始位置移动到了available+1的位置上
fis.read(buf);
//8.使用文件输入流fos将缓冲区buf中的内容写入到目标文件中
fos.write(buf);
}
//9.上面的循环始终会结束,因为文件的大小不可能无限的大,当上面循环的判断使用fis.available()读取到当前剩余的文件大小小于102400 byte时,
//使用fis.read(buf, 0, available)将剩余的文件数据读取的buf对应的位置,
//例如,最后剩下的文件数据大小为100 byte,即available的值为100,那么使用执行方法fis.read(buf, 0, available),后,
//buf数组中的buf[0]到buf[99]会有数据,buf[100]之后的就都是空了。
fis.read(buf, 0, available);
//10.调用输出流fos.write(buf, 0, available)表示将buf中的前available大小的数据输出,
//例如上面举得例子,就只会将buf中的前100位数据输出。
fos.write(buf, 0, available);
fis.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 弹出文件选择对话框,选择要被复制的源目录
* @return
*/
private static File getSourcePath(){
//1.弹出文件选择对话框
JFileChooser chooser = new JFileChooser();
//2.设置只能选择目录
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//3.返回选择的目录,如果没有选择则返回null
if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){
return chooser.getSelectedFile();
}
return null;
}
/**
* 弹出对话框,选择文件复制后存放的目标目录
* @return
*/
private static File getOutputPath(){
//1.弹出文件选择对话框
JFileChooser chooser = new JFileChooser();
//2.设置只能选择目录
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//3.返回选择的目录,如果没有选择则返回null
if(chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION){
return chooser.getSelectedFile();
}
return null;
}
}
相关问答
Q1: java web 项目中的无限级分类?
java无限分类代码你理解清楚关系就明白了java无限分类代码, 把分类想象成一个对象, 他有id(自身编号), name(自身名称), pid(父级编号)java无限分类代码; 如此只要他一个分类的pid等于另一个的id,那么他就是另一个的子类; 如此迭代, 即可。
Q2: JAVA怎么定义一个无限数组
C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。
比如int a[] = {1,2,3,4,5}; 数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。
但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。
1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。
通过下面例子来理解该方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include stdio.h
#include stdlib.h
int main()
{
int size=100;//最初为100个元素空间。
int *a = NULL;
int i = 0;
a = malloc(sizeof(int) * size);
if(a == NULL) return -1;
while(scanf("%d", a+i) == 1)//循环向a中输入数据,直到输入非数值字符为止
{
i++;
if(i == size)//数组空间不足
{
size *=2; //将数组空间扩大二倍, 也可以改用size+=100;之类的操作,使size每次增加固定值。
a=realloc(a,size);//分配新的空间
if(a==NULL)
{
return -1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。
}
}
}
if(a) free(a);//对申请的内存进行释放。
return 0;
}
从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。
如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。
所以这种方法可以做到软件意义上的无限大数组空间。
但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。
2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。
Q3: JAVA 如何编写1无限循环
while(true)//循环的条件无非是满足满足括号内的条件,布尔型true为真,就会一直满足条件
{
//循环内容
//若要退出循环,可用break
//跳出当前这次循环,执行下一次循环可用continue
}
//第二种
for(;;)
{
//没有条件默认为真
}
Q4: java中的无限级分类?
其实跟树一样。无限级数。以我的经验 肯定是 比如 中国 下面在分 重庆、北京、成都等、 然后在分 重庆市、万州区。以一种树形的结构展现
用xtree控件或者extree。网上搜一下。很多DEMO
关于java无限分类代码和javaio分类的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。








