本次项目,基于面试时,被问到为什么备份时没有考虑过备份到手机上,而尝试实现自动备份的项目。
一.本次项目,学会的知识感悟如下:
a.如何找到手机的根目录并且传送文件?
1.电脑上搭建adb
2.使用adb指令将文件复制到电脑上
b.如何获取系统当前时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-ddhhmmss");
String formatStr = df.format(new Date());
c.如何在java进行命令执行并且获取结果
String line;
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//获取输出结果
if ((line = reader.readLine()) != null) {
System.out.println(line);
}
d.通过sleep函数完成线程休眠
Thread.sleep((long) Timeout * 1000);
e.如何实现开机自动启动该程序
使用批处理文件,并且放在指定目录下
二.最终代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Codeback {
public static void main(String[] args) {
//1.获取源文件,备份文件目录和进程时间间隔
String SourceDir="C:\\Users\\Chen\\Desktop\\test";
String LCodeBackDir="/sdcard/CodeBackup";
byte Timeout=60;
/*
* 对内部的处理
* 1.先使用时间拼接备份文件目录名字
* 2.使用adb拼接语句执行命令
* 3.用命令行读取结果
* 4.最后进程暂停
* */
//1.如何获取时间
//2.如何执行命令且获取结果(原理)
//3.如何引入进程并且何时唤醒(进程原理)
while(true)
{
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-ddhhmmss");
String formatStr = df.format(new Date());
String FCodeBackDir = LCodeBackDir + "/" + formatStr;
String command = "adb push" + " " + SourceDir + " " + FCodeBackDir;
System.out.println(command);
String line;
try {
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
if ((line = reader.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
reader.close();
} catch (InterruptedException | IOException var12) {
var12.printStackTrace();
}
try {
/*
* 【a】sleep()方法是Thread类的静态方法,如果调用线程对象.sleep()方法并不是该线程就休眠,反正在哪一个线程里面执行了sleep()方法哪一个线程就休眠。
【b】线程睡眠到期自动苏醒,并返回到可运行状态(就绪),不是运行状态。
* */
Thread.sleep((long) Timeout * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//用sleep对进程加以唤醒
}
}
少年与爱永不老去,即便披荆斩棘,丢失怒马鲜衣。