计算机多级体系原理简介


文件的本质
- 一段子节流
- 每个程序负责解释文件中的字节流
- 十六进制70,查表man ascii就是p
- 为什么没有换行,看到2个nl就是换行


字节码文件是典型的二进制文件



InputStream/OutputStream
- 抽象的输⼊/输出操作,无论是:
- 文件写入字节流【实战】
- 从⽹络读取字节流【实战】
- 从其他什什么破烂玩意读取字节流【实战】
谨记:
- 如果你不是对文件系统十分熟悉的话,请永远使用绝对路径!!!!
- 一个字节的范围就是0-255
读取文件字节流
package com.github.hcsp;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("/Users/ories/Downloads/java-zhangbo-project/22/0/test/src/main/java/com/github/hcsp/Main.java");
while (true) {
int b = is.read();
if (b == -1) {
break;
}
System.out.print((char) b);
}
}
}
package com.github.hcsp;
import java.io.*;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
OutputStream os = new FileOutputStream("/Users/ories/Downloads/java-zhangbo-project/22/0/test/src/main/java/com/github/hcsp/Main2.java");
os.write('p');
}
}
public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("ls");
Process process = pb.start();
System.out.println((char) process.getInputStream().read());
}
file在java中代表什么
public static void main(String[] args) throws IOException {
File file = new File("/Users/ories/Downloads/java-zhangbo-project/24/1/1-read-github-pull-requests/src/main/java/com/github/hcsp/http/test1.java");
File inExistFile = new File("/Users/ories/Downloads/java-zhangbo-project/24/1/1-read-github-pull-requests/src/main/java/com/github/hcsp/http/test3.java");
file.exists();
file.isFile();
file.isDirectory();
}
java中的File
- 不要误会!不要误会!不要误会!
- File并不代表一个"文件",它只代表一个"路径"
- 抽象的"文件"路径:文件或者文件夹
- File的常见方法
- NIO (Java 7+)
- New IO 新的IO
- Non-blocking IO 非阻塞IO
- NIO的Path - 就是旧版本的File


归一化文件路径

java的console

Java的NIO
- NIO的定义有两种,1.New IO新的IO 2.Non-blocking IO非阻塞IO
- NIO的Path - 就是java旧版本的File
- Path toFile, file可以toPath互相转,Files类比较常用,NIO只需要知道这Files一个类
- readAllLines不引入第三方库的读取文件
经典的基于IO流的模型的优缺点


zsh
换行符的历史
- 古老的打印机的换行,
- windows \r\n 来自古老的打自己
- linux的是\n
bufferReader和bufferWriter

- buffer reader在java里是什么,就是cb的数组

不要重新做轮子
课后练习
package com.github.hcsp.io;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class FileAccessor {
public static List<String> readFile1(File file) throws IOException {
InputStream inputStream = new FileInputStream(file);
StringBuffer stringBuffer = new StringBuffer();
int readInt = inputStream.read();
while (readInt != -1) {
stringBuffer.append((char) readInt);
readInt = inputStream.read();
}
String intputStr = new String(stringBuffer);
List<String> list = Arrays.asList(intputStr.split("\n"));
inputStream.close();
return list;
}
public static List<String> readFile2(File file) throws IOException {
List<String> list = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new FileReader(String.valueOf(file.toPath())));
String lineStr = bufferedReader.readLine();
while (lineStr != null) {
list.add(lineStr);
lineStr = bufferedReader.readLine();
}
bufferedReader.close();
return list;
}
public static List<String> readFile3(File file) throws IOException {
return Files.readAllLines(file.toPath());
}
public static void writeLinesToFile1(List<String> lines, File file) throws IOException {
FileOutputStream fileOutputStream = new FileOutputStream(file);
for (String string : lines) {
byte b[] = string.getBytes();
fileOutputStream.write(b);
fileOutputStream.write('\n');
}
fileOutputStream.close();
}
public static void writeLinesToFile2(List<String> lines, File file) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(String.valueOf(file.toPath())));
String write = "";
for (String string : lines) {
write += string + "\n";
}
bufferedWriter.write(write);
bufferedWriter.close();
}
public static void writeLinesToFile3(List<String> lines, File file) throws IOException {
Files.write(file.toPath(), lines);
}
public static void main(String[] args) throws IOException {
}
}
package com.github.hcsp.io;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import com.alibaba.fastjson.JSON;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
public class Crawler {
public static void getFirstPageOfPullRequests(String repo, Integer n, File file) throws IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
StringBuilder target = new StringBuilder("https://api.github.com/repos/" + repo + "/pulls");
HttpGet httpGet = new HttpGet(String.valueOf(target));
httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)");
httpGet.addHeader("Content-Type", "application/x-www-form-urlencoded");
CloseableHttpResponse response = httpclient.execute(httpGet);
try {
HttpEntity entity1 = response.getEntity();
InputStream is = entity1.getContent();
String html = IOUtils.toString(is, "UTF-8");
JSONArray JSONArray = JSON.parseArray(html);
traverse(JSONArray, n, file);
} finally {
response.close();
}
}
public static void savePullRequestsToCSV(String repo, int n, File csvFile) throws IOException {
getFirstPageOfPullRequests(repo, n, csvFile);
}
public static void traverse(JSONArray issuesInfoList, Integer n, File file) throws IOException {
List<String> linesList = new ArrayList<>();
linesList.add("number,author,title");
for (int i = 0; i < n; i++) {
JSONObject account = (JSONObject) issuesInfoList.getJSONObject(i).get("user");
Integer number = (Integer) issuesInfoList.getJSONObject(i).get("number");
String title = (String) issuesInfoList.getJSONObject(i).get("title");
String user = account.getString("login");
String singleLines = number + "," + user + "," + title;
linesList.add(singleLines);
Files.write(file.toPath(), linesList);
}
System.out.println(linesList);
}
public static void main(String[] args) throws IOException {
savePullRequestsToCSV("golang/go", 5, new File("./test8.csv"));
}
}