递归练习, 计算文件夹大小#
import java.io.File;
import java.util.Scanner;
public class Demo1_FolderSize {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String strFolder = null;
long size = 0;
while (true){
if( sc.hasNext()){
strFolder = sc.nextLine();
break;
}
}
if( strFolder.equals(null)){
System.out.println("不能为空");
} else {
File folder = new File(strFolder);
if(folder.isFile()){
size = folder.length();
} else if(folder.isDirectory()){
size = getSize(folder);
} else if(! folder.exists()){
System.out.println("文件夹不存在");
}
}
System.out.println(size);
}
public static long getSize(File folder){
long len = 0;
File [] files = folder.listFiles();
for(File subFile:files){
if(subFile.isFile()){
len = len + subFile.length();
} else{
len = len + getSize(subFile);
}
}
return len;
}
}
递归删除文件夹#
import java.io.File;
import java.util.Scanner;
public class Demo2_DeleteFolder {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String strFolder = null;
strFolder = getDir(sc);
if( strFolder.equals(null)){
System.out.println("不能为空");
} else {
File folder = new File(strFolder);
if(folder.isFile()){
folder.delete();
} else if(folder.isDirectory()){
deleteFolder(folder);
} else if(! folder.exists()){
System.out.println("文件夹不存在");
}
}
}
private static void deleteFolder(File folder) {
File[] files = folder.listFiles();
for (File f : files){
if(f.isFile()){
f.delete();
} else if(f.isDirectory()){
deleteFolder(f);
f.delete();
}
}
folder.delete();
}
public static String getDir(Scanner sc) {
String strFolder;
while (true){
if( sc.hasNext()){
strFolder = sc.nextLine();
break;
}
}
return strFolder;
}
}
复制文件到指定文件夹下#
- 源文件夹, 目标文件夹
- 在目标文件夹中创建源文件夹
- 遍历源文件夹, 文件则调用stream 复制到目标文件夹/源文件夹, 文件夹则递归调用
import java.io.*;
public class Demo3_MvFolder {
public static void main(String[] args) throws IOException {
File folderSrc = new File("test");
File folderDes = new File("des");
copyFile3(folderSrc, folderDes);
}
public static void copyFile3(File folderSrc, File folderDes) throws IOException {
if(! folderDes.isDirectory()){
System.out.println("请复制到文件夹中");
return;
}
File newFolder = new File(folderDes, folderSrc.getName());
newFolder.mkdir();
for(File f : folderSrc.listFiles()){
if( f.isFile()){
fileStream(f.getAbsolutePath(), newFolder.getAbsolutePath()+"/"+f.getName());
} else{
copyFile3(f, newFolder);
}
}
}
public static void copyFile2(File folderSrc, File folderDes) throws IOException{
if(! folderDes.isDirectory()){
System.out.println("请复制到文件夹中");
return;
}
File tempFolder = new File(folderDes.getAbsolutePath()+"/"+folderSrc.getName());
if( folderSrc.isDirectory()){
tempFolder.mkdir();
}
for( File f : folderSrc.listFiles()){
if( f.isFile()){
fileStream(f.getAbsolutePath(), tempFolder.getAbsolutePath()+"/"+f.getName());
} else {
copyFile2(f, tempFolder);
}
}
}
public static void copyFile(File folderSrc, File folderDes) throws IOException {
if(! folderDes.isDirectory()){
System.out.println("请复制到文件夹中");
return;
}
if( folderSrc.isDirectory()){
new File(folderDes.getAbsolutePath()+"/"+folderSrc).mkdir();
}
for(File f: folderSrc.listFiles()){
if ( f.isFile()){
fileStream(f.getAbsolutePath(), (folderDes.getAbsolutePath()+"/"+f.getPath()));
} else if( f.isDirectory()){
copyFile(f, folderDes);
}
}
}
public static void fileStream(String src, String desc) throws IOException{
FileInputStream fis = new FileInputStream(src);
int len;
byte[] arr = new byte[1024*100];
FileOutputStream fos = new FileOutputStream(desc);
while ( (len = fis.read(arr)) != -1){
fos.write(arr,0,len);
}
fis.close();
fos.close();
}
}
打印文件夹的内文件, 保持层级#
import java.io.File;
public class Demo4_PrintFolder {
public static void main(String[] args) {
File folder = new File("test");
int lev = 0;
printFolder(folder, lev);
}
public static void printFolder(File folder , int lev){
System.out.println(folder.getPath());
for ( File f : folder.listFiles()){
for (int i=0;i<=lev;i++){
System.out.print("\t");
}
if(f.isFile()){
System.out.println(f.getPath());
} else {
// lev不能用lev++或++lev, 改变了lev值
printFolder(f, lev+1);
}
}
}
}
斐波那契数列#
public class Demo5_TwoZi {
public static void main(String[] args) {
System.out.println(twoZi(6));
}
public static int twoZi(int month){
int sum = 0;
if(month > 2){
sum = twoZi(month-1) + twoZi(month-2);
} else if(month == 2){
sum = 1;
} else if(1 == month){
sum = 1;
}
return sum;
}
}
1000的阶乘, 其中所有0和尾部0的个数#
import java.math.BigInteger;
public class Demo6_1000JieChen {
public static void main(String[] args) {
BigInteger bi = new BigInteger("1");
for(int i=1;i<=1000;i++) {
BigInteger tmepBi = new BigInteger(i + "");
bi = bi.multiply(tmepBi);
}
int sum = 0;
String str = String.valueOf(bi);
for(int i=0;i<str.length();i++){
if('0'== (str.charAt(i))){
sum++;
}
}
int num = 0;
for(int j=str.length()-1;j>=0;j--){
if( '0' == str.charAt(j)){
num++;
} else {
break;
}
}
System.out.println(sum);
System.out.println(num);
}
}
约瑟夫环#
import java.util.ArrayList;
import java.util.Iterator;
public class Demo7_LuckYue {
public static void main(String[] args) {
int num = 8;
System.out.println(getLuck(num));
System.out.println(getLuck2(num));
}
public static int getLuck2(int num) {
ArrayList<Integer> arrayList = new ArrayList<>();
for(int i=1;i<= num;i++){
arrayList.add(i);
}
int sum = 1;
for(int i=0; arrayList.size()!=1;i++){
if( i == arrayList.size() ){
i = 0;
}
if(0 == sum % 3){
arrayList.remove(i--);
}
sum ++;
}
return arrayList.get(0);
}
public static int getLuck(int num){
ArrayList<Integer> arrayList = new ArrayList<>();
for(int i=1;i<= num;i++){
arrayList.add(i);
}
int sum = 0;
while (arrayList.size() > 1){
Iterator<Integer> iterator = arrayList.iterator() ;
while (iterator.hasNext()){
Integer i = iterator.next();
// next()和remove方法依赖关系
sum++;
if(0 == sum % 3){
iterator.remove();
}
}
}
return arrayList.get(0);
}
}