package com.renchao; import org.junit.Test; import sun.net.www.http.HttpClient; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.sql.Date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Duration; import java.time.Instant; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import java.util.StringJoiner; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Test01 { public static void main(String[] args) throws InterruptedException { long l = System.nanoTime(); // String format = String.format("%s-%s", "a", "b"); // String format = "a" + "-" +"b"; StringBuilder stringBuilder = new StringBuilder(); String s = stringBuilder.append("a").append("-").append("b").toString(); long duration = System.nanoTime() - l; System.out.println(duration); System.out.println(TimeUnit.NANOSECONDS.toMillis(duration)); new Thread(Test01::t2).start(); Thread.sleep(10000000); } private static void t2() { System.out.println("aa-t1-t2"); t1(); } private static void t1() { int i = 1; int k = i + 5; System.out.println(k); try { Thread.sleep(10000000); } catch (InterruptedException e) { e.printStackTrace(); } } @Test public void test02() { List ALLOW_PYTHON_EXT = Arrays.asList("zip", "tar", "gz", "bz2"); List ALLOW_DATA_EXT = Arrays.asList("zip", "tar", "gz", "csv", "txt", "xls", "xlsx"); String fileType = "PYTHONs"; String fileExt = "zip"; boolean isPython = "PYTHON".equals(fileType) && ALLOW_PYTHON_EXT.contains(fileExt); boolean isData = "DATA".equals(fileType) && ALLOW_DATA_EXT.contains(fileExt); if (!isPython && !isData) { System.out.println("文件类型错误"); } else { System.out.println("文件类型正确===="); } } @Test public void test03() throws IOException { String ipAddress = "8.8.8.8"; // 要查询的IP地址 String apiKey = "YOUR_API_KEY"; // 在https://ipinfo.io/signup获取您的免费API密钥 String apiUrl = "http://whois.pconline.com.cn/ipJson.jsp?ip=112.64.187.2&json=true"; URL url = new URL(apiUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8.name())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); String jsonResponse = response.toString(); System.out.println(jsonResponse); // 打印响应,包含地理位置等信息 // 在这里您可以解析jsonResponse并提取所需的地理位置信息 } @Test public void test07() { int numRecords = 5; String csvFileName = "C:\\Users\\RENCHAO\\Desktop\\temp-sss\\data.csv"; try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(csvFileName, true), StandardCharsets.UTF_8)) { // 写入CSV文件的列名 // writer.append("line_code,line_name,line_status,company_code,company_name,service_type,metric_value\n"); writer.write('\uFEFF'); // 生成随机数据并写入CSV文件 for (int i = 1; i <= numRecords; i++) { String lineCode = "Line" + i; String lineName = "名字" + i; String lineStatus = "测试" + i; String companyCode = "Company" + i; String companyName = "CompanyName" + i; String serviceType = "T" + i; int metricValue = new Random().nextInt(1000); // 假设metric_value是0到999之间的整数 writer.append(lineCode + "," + lineName + "," + lineStatus + "," + companyCode + "," + companyName + "," + serviceType + "," + metricValue + "\n"); } System.out.println(numRecords + " 条数据已生成并保存到 " + csvFileName + " 文件中。"); System.out.println("系统默认编码:" + Charset.defaultCharset().displayName()); } catch (IOException e) { e.printStackTrace(); } } /** * 按照csv格式保存为文件, * StringJoiner按照指定分隔符拼串 */ @Test public void test08() throws IOException { FileWriter writer = new FileWriter("C:\\Users\\RENCHAO\\Desktop\\test\\data22.csv", true); StringJoiner sj1 = new StringJoiner(","); sj1.add("sss").add("ccc"); writer.write(sj1 + "\n"); StringJoiner sj2 = new StringJoiner(","); sj2.add("kk").add("z,zz"); writer.write(sj2 + "\n"); writer.close(); } /** * 读取文件行数 */ @Test public void test11() { String uri = "C:\\Users\\RENCHAO\\Desktop\\test\\data.csv"; // long l = System.currentTimeMillis(); // try { // long lineCount = Files.lines(Paths.get(uri)).count(); // System.out.println("行数:" + lineCount); // } catch (IOException e) { // e.printStackTrace(); // } // System.out.println("耗时:" + (System.currentTimeMillis() - l)); long l = System.currentTimeMillis(); try (BufferedReader reader = new BufferedReader(new FileReader(uri))) { long lineCount = 0; while (reader.readLine() != null) { lineCount++; } System.out.println("行数:" + lineCount); } catch (IOException e) { e.printStackTrace(); } System.out.println("耗时:" + (System.currentTimeMillis() - l)); } /** * 对比list直接迭代与stream的效率 */ @Test public void test13() { List> list = new ArrayList<>(); for (int i = 0; i < 100000; i++) { Map map = new HashMap<>(); map.put("id", i); map.put("group", "aa"); map.put("name", "aa" + i * 2); list.add(map); } for (int i = 100000; i < 200000; i++) { Map map = new HashMap<>(); map.put("id", i); map.put("group", "bb"); map.put("name", "bb" + i * 2); list.add(map); } long l = System.currentTimeMillis(); Map>> group = list.stream().collect(Collectors.groupingBy(m -> m.get("group").toString())); System.out.println("耗时:" + (System.currentTimeMillis() - l)); Set strings = group.keySet(); System.out.println(strings); for (String s : strings) { System.out.println(group.get(s).size()); } } /** * 读取大文件最后一行 */ @Test public void test15() throws IOException { String path = "C:\\Users\\RENCHAO\\Desktop\\test\\data.csv"; // RandomAccessFile file = new RandomAccessFile(path, "r"); // file.seek(file.length() - 2); // String theLastLine = file.readLine(); // System.out.println(theLastLine); long l = System.currentTimeMillis(); System.out.println(readLastLine2(path)); System.out.println("耗时:" + (System.currentTimeMillis() - l)); System.out.println(Integer.parseInt("77")); } public static String readLastLine(String filePath) throws IOException { try (RandomAccessFile file = new RandomAccessFile(filePath, "r")) { StringBuilder lastLine = new StringBuilder(); for (long pointer = file.length() - 1; pointer >= 0; pointer--) { file.seek(pointer); int currentByte = file.read(); if (currentByte == '\n' || currentByte == '\r') { // Found the end of the last line break; } lastLine.insert(0, (char) currentByte); } return lastLine.toString(); } } public static String readLastLine2(String filePath) throws IOException { try (RandomAccessFile file = new RandomAccessFile(filePath, "r")) { for (long pointer = file.length() - 1; pointer >= 0; pointer--) { file.seek(pointer); int currentByte = file.read(); if (currentByte == '\n' || currentByte == '\r') { break; } } return file.readLine(); } } /** * 文件压缩 */ private void compression(File file) throws IOException { FileOutputStream outputStream = new FileOutputStream(file.toString().replace("csv", "zip")); ZipOutputStream zipOut = new ZipOutputStream(outputStream); zipOut.putNextEntry(new ZipEntry(file.getName())); FileInputStream inputStream = new FileInputStream(file); byte[] bytes = new byte[1024]; int length; while ((length = inputStream.read(bytes)) >= 0) { zipOut.write(bytes, 0, length); } inputStream.close(); zipOut.close(); outputStream.close(); } /** * 遍历目录,获取所有文件列表 */ private void getFileList(File dir, List fileList) { if (!dir.exists()) { return; } File[] files = dir.listFiles(); if (files == null) { return; } for (File file : files) { if (file.isDirectory()) { getFileList(file, fileList); } else { fileList.add(file); } } } @Test public void test16() { } }