1. 引言
题目1:需要打印某目录(包括子目录)下的所有html文件
题目2:输入网址下获取网站的源码
题目3:创建2个线程,交替输出1A2B3C....9
2. 实现代码
2.1 题目1
分析:需要用到File类,获取文件和目录是listFiles,子目录使用递归。
import java.io.File;
/**
* 遍历下某目录下(包含子目录)的txt文件,执行方式
*/
public class TxtFileFinder {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("请输入参数--dirPath");
} else {
fileFinder(args[0]);
}
}
public static void fileFinder(String path) {
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
for (File item : files) {
//输出后缀是.txt的文件
if (item.isFile()) {
String fileName = item.getName();
String suffix = fileName.substring(fileName.indexOf("."));
if (".html".equals(suffix)) {
System.out.println(fileName);
}
} else if (item.isDirectory()) {
fileFinder(item.getAbsolutePath());
}
}
} else {
System.out.println("目录不存在!");
}
}
}
2.2 题目2
分析:需要用到URL类,字节读取等。
package com.fanling.venus;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class GetWebCode {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("请输入参数 --url");
} else {
printWebCode(args[0]);
}
}
public static void printWebCode(String url) {
try {
URL web = new URL("http://" + url);
HttpURLConnection connection = (HttpURLConnection) web.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
InputStream is = connection.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
is.close();
byte[] code = out.toByteArray();
System.out.println(new String(code, "utf-8"));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2.3 题目3
package com.fanling.venus;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* 通过 共享锁
*/
public class ThreadDemo {
Lock lock = new ReentrantLock();
boolean check = true;
public static void main(String[] args) {
ThreadDemo demo = new ThreadDemo();
demo.run();
}
public void run() {
new Thread1().start();
new Thread2().start();
}
class Thread1 extends Thread {
@Override
public void run() {
while (true) {
for (int i = 0; i <= 9; ) {
try {
lock.lock();
while (check) {
System.out.print(i);
check = false;
i++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
}
}
class Thread2 extends Thread {
@Override
public void run() {
while (true) {
for (int i = 65; i <= 90; ) {
try {
lock.lock();
while (!check) {
System.out.print((char) i);
check = true;
i++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
}
}
}