diff --git a/git_commit_and_push.bat b/git_commit_and_push.bat new file mode 100644 index 00000000..ce0ef5eb --- /dev/null +++ b/git_commit_and_push.bat @@ -0,0 +1,3 @@ +git add . +git commit -a -m "auto" +git push -u origin master \ No newline at end of file diff --git a/src/com/alex/design_pattern/proxy/ISubject.java b/src/com/alex/design_pattern/proxy/ISubject.java new file mode 100644 index 00000000..c225ee8f --- /dev/null +++ b/src/com/alex/design_pattern/proxy/ISubject.java @@ -0,0 +1,7 @@ +package com.alex.design_pattern.proxy; + +public interface ISubject { + void doAction(); + + void byebye(); +} \ No newline at end of file diff --git a/src/com/alex/design_pattern/proxy/RealSubject.java b/src/com/alex/design_pattern/proxy/RealSubject.java new file mode 100644 index 00000000..a92d3b3d --- /dev/null +++ b/src/com/alex/design_pattern/proxy/RealSubject.java @@ -0,0 +1,13 @@ +package com.alex.design_pattern.proxy; + +public class RealSubject implements ISubject { + @Override + public void doAction() { + System.out.println("Real Action Here!"); + } + + @Override + public void byebye() { + System.out.println("Wave goodbye!"); + } +} diff --git a/src/com/alex/design_pattern/proxy/Run.java b/src/com/alex/design_pattern/proxy/Run.java new file mode 100644 index 00000000..8ed9e64a --- /dev/null +++ b/src/com/alex/design_pattern/proxy/Run.java @@ -0,0 +1,10 @@ +package com.alex.design_pattern.proxy; + + +public class Run { + public static void main(String[] args) { + SubjectProxy subject = new SubjectProxy(); + subject.doAction(); + subject.byebye(); + } +} diff --git a/src/com/alex/design_pattern/proxy/SubjectProxy.java b/src/com/alex/design_pattern/proxy/SubjectProxy.java new file mode 100644 index 00000000..9dc3762f --- /dev/null +++ b/src/com/alex/design_pattern/proxy/SubjectProxy.java @@ -0,0 +1,24 @@ +package com.alex.design_pattern.proxy; + + +// 代理对象(代理类) // +public class SubjectProxy implements ISubject { + private ISubject subject; + + public SubjectProxy() { + // RealSubject实例可根据环境变量、配置等创建不同类型的实例(多态) + subject = new RealSubject(); // 此处仅简单地new实例 + } + + @Override + public void doAction() { + System.out.println(">> doWhatever start"); // 扩展进行额外的功能操作(如鉴权、计时、日志等) + subject.doAction(); + System.out.println("doWhatever end <<"); // 扩展进行额外的功能操作(如鉴权、计时、日志等) + } + + @Override + public void byebye() { + System.out.println("Say goodbye"); // 改变委托类行为(例如实现数据库连接池时避免close关闭连接) + } +} \ No newline at end of file diff --git a/src/com/utils/FileUtil.java b/src/com/utils/FileUtil.java new file mode 100644 index 00000000..63725fdb --- /dev/null +++ b/src/com/utils/FileUtil.java @@ -0,0 +1,92 @@ +package com.utils; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.logging.Logger; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class FileUtil { + public static boolean deleteDirectory(String path) { + Path dir = Paths.get(path); + Stream fileStream = null; + try { + fileStream = Files.walk(dir); + List files = fileStream.sorted(Comparator.reverseOrder()).map(Path::toFile).collect(Collectors.toList()); + for (File file : files) { + System.out.println(file.getAbsolutePath() + " isDir " + file.isDirectory()); + if (!file.delete()) { + System.out.println("删除失败 " + file.getAbsolutePath()); + return false; + } + } + + } catch (Exception e) { + e.printStackTrace(); + System.out.println("删除目录失败 " + path); + return false; + } finally { + if (Objects.nonNull(fileStream)) { + fileStream.close(); + } + } + + System.out.println("删除目录成功 " + path); + return true; + } + + public static boolean copyDirectory(String sourceDir, String destDir) { + Path source = Paths.get(sourceDir); + Path dest = Paths.get(destDir); + if (!dest.toFile().exists()) { + if (!dest.toFile().mkdir()) { + System.out.println("无法创建目录 " + destDir); + System.out.println("复制目录失败 " + sourceDir + " -> " + destDir); + return false; + } + } + dest = dest.resolve(source.getParent().relativize(source)); + System.out.println(dest); + Stream pathStream = null; + try { + pathStream = Files.walk(source); + List paths = pathStream.sorted().collect(Collectors.toList()); + for (Path path : paths) { + System.out.println(path.toString() + " isDir " + path.toFile().isDirectory()); + Path targetPath = dest.resolve(source.relativize(path)); + System.out.println(path + " -> " + targetPath); + if (path.toFile().isDirectory()) { + if (!targetPath.toFile().exists()) { + Files.copy(path, dest.resolve(source.relativize(path)), StandardCopyOption.REPLACE_EXISTING); + } + } else { + Files.copy(path, dest.resolve(source.relativize(path)), StandardCopyOption.REPLACE_EXISTING); + } + } + } catch (Exception e) { + e.printStackTrace(); + System.out.println("复制目录失败 " + sourceDir + " -> " + destDir); + return false; + } finally { + if (Objects.nonNull(pathStream)) { + pathStream.close(); + } + } + + System.out.println("复制目录成功 " + sourceDir + " -> " + destDir); + return true; + } + + + public static void main(String[] args) { + //deleteDirectory("D:\\nginx_path\\a"); + copyDirectory("D:\\nginx_path\\a", "D:\\nginx_path\\parentDir2"); + } +} diff --git a/src/com/winterbe/java11/HttpClientExamples.java b/src/com/winterbe/java11/HttpClientExamples.java deleted file mode 100644 index 7342b1de..00000000 --- a/src/com/winterbe/java11/HttpClientExamples.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.winterbe.java11; - -import java.io.IOException; -import java.net.Authenticator; -import java.net.PasswordAuthentication; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.time.Duration; - -public class HttpClientExamples { - - public static void main(String[] args) throws IOException, InterruptedException { -// syncRequest(); -// asyncRequest(); -// postData(); - basicAuth(); - } - - private static void syncRequest() throws IOException, InterruptedException { - var request = HttpRequest.newBuilder() - .uri(URI.create("https://winterbe.com")) - .build(); - var client = HttpClient.newHttpClient(); - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println(response.body()); - } - - private static void asyncRequest() { - var request = HttpRequest.newBuilder() - .uri(URI.create("https://winterbe.com")) - .build(); - var client = HttpClient.newHttpClient(); - client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) - .thenApply(HttpResponse::body) - .thenAccept(System.out::println); - } - - private static void postData() throws IOException, InterruptedException { - var request = HttpRequest.newBuilder() - .uri(URI.create("https://postman-echo.com/post")) - .timeout(Duration.ofSeconds(30)) - .version(HttpClient.Version.HTTP_2) - .header("Content-Type", "text/plain") - .POST(HttpRequest.BodyPublishers.ofString("Hi there!")) - .build(); - var client = HttpClient.newHttpClient(); - var response = client.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println(response.statusCode()); // 200 - } - - private static void basicAuth() throws IOException, InterruptedException { - var client = HttpClient.newHttpClient(); - - var request1 = HttpRequest.newBuilder() - .uri(URI.create("https://postman-echo.com/basic-auth")) - .build(); - var response1 = client.send(request1, HttpResponse.BodyHandlers.ofString()); - System.out.println(response1.statusCode()); // 401 - - var authClient = HttpClient - .newBuilder() - .authenticator(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication("postman", "password".toCharArray()); - } - }) - .build(); - var request2 = HttpRequest.newBuilder() - .uri(URI.create("https://postman-echo.com/basic-auth")) - .build(); - var response2 = authClient.send(request2, HttpResponse.BodyHandlers.ofString()); - System.out.println(response2.statusCode()); // 200 - } - -} diff --git a/src/com/winterbe/java11/LocalVariableSyntax.java b/src/com/winterbe/java11/LocalVariableSyntax.java deleted file mode 100644 index e2a60906..00000000 --- a/src/com/winterbe/java11/LocalVariableSyntax.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.winterbe.java11; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.Predicate; - -public class LocalVariableSyntax { - - public static void main(String[] args) { - var text = "Banana"; -// Incompatible types: -// text = 1; - - -// Cannot infer type: -// var a; -// var nothing = null; -// var bla = () -> System.out.println("Hallo"); -// var method = LocalVariableSyntax::someMethod; - - var list1 = new ArrayList<>(); // ArrayList - - var list2 = new ArrayList>>(); - - for (var current : list2) { - // current is of type: Map> - System.out.println(current); - } - - Predicate predicate1 = (@Deprecated var a) -> false; - - } - - void someMethod() {} - -} diff --git a/src/com/winterbe/java11/Misc.java b/src/com/winterbe/java11/Misc.java deleted file mode 100644 index e343dec7..00000000 --- a/src/com/winterbe/java11/Misc.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.winterbe.java11; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -public class Misc { - - @Deprecated(forRemoval = true) - String foo; - - public static void main(String[] args) throws IOException { - collections(); - strings(); - optionals(); - inputStreams(); - streams(); - } - - private static void streams() { - System.out.println(Stream.ofNullable(null).count()); // 0 - System.out.println(Stream.of(1, 2, 3, 2, 1) - .dropWhile(n -> n < 3) - .collect(Collectors.toList())); // [3, 2, 1] - System.out.println(Stream.of(1, 2, 3, 2, 1) - .takeWhile(n -> n < 3) - .collect(Collectors.toList())); // [1, 2] - } - - private static void inputStreams() throws IOException { - var classLoader = ClassLoader.getSystemClassLoader(); - var inputStream = classLoader.getResourceAsStream("com/winterbe/java11/dummy.txt"); - var tempFile = File.createTempFile("dummy-copy", "txt"); - try (var outputStream = new FileOutputStream(tempFile)) { - inputStream.transferTo(outputStream); - } - System.out.println(tempFile.length()); - } - - private static void optionals() { - System.out.println(Optional.of("foo").orElseThrow()); // foo - System.out.println(Optional.ofNullable(null).or(() -> Optional.of("bar")).get()); // bar - System.out.println(Optional.of("foo").stream().count()); // 1 - } - - private static void strings() { - System.out.println(" ".isBlank()); - System.out.println(" Foo Bar ".strip()); // "Foo Bar" - System.out.println(" Foo Bar ".stripTrailing()); // " Foo Bar" - System.out.println(" Foo Bar ".stripLeading()); // "Foo Bar " - System.out.println("Java".repeat(3)); // "JavaJavaJava" - System.out.println("A\nB\nC".lines().count()); // 3 - } - - private static void collections() { - var list = List.of("A", "B", "C"); - var copy = List.copyOf(list); - System.out.println(list == copy); // true - - var map = Map.of("A", 1, "B", 2); - System.out.println(map); - } - -} diff --git a/src/com/winterbe/java11/dummy.txt b/src/com/winterbe/java11/dummy.txt deleted file mode 100644 index 5eced957..00000000 --- a/src/com/winterbe/java11/dummy.txt +++ /dev/null @@ -1 +0,0 @@ -Foobar \ No newline at end of file diff --git a/src/com/winterbe/java8/samples/stream/Streams1.java b/src/com/winterbe/java8/samples/stream/Streams1.java index 8f438da4..74fe7034 100644 --- a/src/com/winterbe/java8/samples/stream/Streams1.java +++ b/src/com/winterbe/java8/samples/stream/Streams1.java @@ -10,7 +10,7 @@ public class Streams1 { public static void main(String[] args) { - + //sdfsdf List stringCollection = new ArrayList<>(); stringCollection.add("ddd2"); stringCollection.add("aaa2");