怎么把typora里的图片路径同一放到指定路径文件夹下,并改动typora文件里相应的路径名称
时间: 2023-08-05 08:29:05 浏览: 294
可以使用以下步骤来将Typora中的图片路径统一放到指定路径文件夹下,并修改Typora文件中的相应路径名称:
1. 打开Typora软件,并在其中打开需要操作的Markdown文件。
2. 找到该文件中所有的图片路径,并将这些图片复制到一个新的文件夹中。
3. 打开终端(MacOS)或命令提示符(Windows),并进入该Markdown文件所在的目录。
4. 使用以下命令将所有的图片路径修改为新的路径:
```
sed -i '' 's|旧路径|新路径|g' 文件名.md
```
其中,“旧路径”为原始的图片路径,“新路径”为新的图片路径,“文件名.md”为需要修改的Markdown文件名。
5. 保存文件,并在Typora中重新打开该Markdown文件,以确保所有的图片显示正常。
需要注意的是,如果Markdown文件中的图片路径较多,这个操作会比较耗时,建议在操作前备份好Markdown文件。
相关问题
java 解析路径下的.java文件并获取改动类
要解析路径下的.java文件并获取改动类,可以使用Java编写一个程序来实现。下面是一个简单的实现:
1. 首先需要获取该路径下的所有.java文件,可以使用Java的File类来实现:
```java
File folder = new File("path/to/folder");
File[] files = folder.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
});
```
2. 对于每个文件,需要读取其内容并解析其中的类声明。可以使用Java的Scanner类来读取文件内容,并使用正则表达式来匹配类声明:
```java
Scanner scanner = new Scanner(file);
String content = scanner.useDelimiter("\\Z").next();
scanner.close();
Pattern pattern = Pattern.compile("class\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\{");
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
String className = matcher.group(1);
// 处理类名
}
```
3. 为了确定哪些类发生了改动,可以使用版本控制工具(如Git)来比较代码库中的版本和当前文件的版本。可以使用Java的ProcessBuilder类来执行Git命令:
```java
ProcessBuilder builder = new ProcessBuilder("git", "diff", "--name-only", "HEAD", file.getAbsolutePath());
Process process = builder.start();
if (process.waitFor() == 0) {
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if (line.endsWith(".java")) {
String changedClassName = line.substring(line.lastIndexOf(File.separatorChar) + 1, line.lastIndexOf('.'));
// 处理改动的类名
}
}
}
```
4. 综合以上步骤,可以写出完整的程序:
```java
import java.io.*;
import java.util.regex.*;
public class JavaFileParser {
public static void main(String[] args) throws Exception {
File folder = new File("path/to/folder");
File[] files = folder.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
});
for (File file : files) {
Scanner scanner = new Scanner(file);
String content = scanner.useDelimiter("\\Z").next();
scanner.close();
Pattern pattern = Pattern.compile("class\\s+([a-zA-Z_][a-zA-Z0-9_]*)\\s*\\{");
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
String className = matcher.group(1);
ProcessBuilder builder = new ProcessBuilder("git", "diff", "--name-only", "HEAD", file.getAbsolutePath());
Process process = builder.start();
if (process.waitFor() == 0) {
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if (line.endsWith(".java")) {
String changedClassName = line.substring(line.lastIndexOf(File.separatorChar) + 1, line.lastIndexOf('.'));
if (changedClassName.equals(className)) {
System.out.println(className + " in " + file.getAbsolutePath() + " has changed.");
break;
}
}
}
}
}
}
}
}
```
java 解析svn路径下的.java文件并获取改动类
要实现这个功能,你需要使用 SVNKit 库中的 Java API。以下是大致的步骤:
1. 使用 SVNKit 库连接到 SVN 服务器,并获取指定路径下的所有变更日志。
```java
SVNURL url = SVNURL.parseURIEncoded(svnUrl);
ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(svnUsername, svnPassword);
SVNRepository repository = SVNRepositoryFactory.create(url);
repository.setAuthenticationManager(authManager);
long startRevision = repository.getLatestRevision() - 10; // 获取最近的10个版本
long endRevision = repository.getLatestRevision();
Collection<SVNLogEntry> logEntries = repository.log(new String[]{""}, null, startRevision, endRevision, true, true);
```
2. 遍历变更日志,获取每个文件的变更信息,如果是 .java 文件则进行解析。
```java
for (SVNLogEntry logEntry : logEntries) {
Map<String, SVNLogEntryPath> changedPaths = logEntry.getChangedPaths();
for (Map.Entry<String, SVNLogEntryPath> entry : changedPaths.entrySet()) {
SVNLogEntryPath path = entry.getValue();
String filePath = path.getPath();
if (filePath.endsWith(".java") && (path.getType() == SVNLogEntryPath.TYPE_ADDED || path.getType() == SVNLogEntryPath.TYPE_MODIFIED)) {
// 解析 .java 文件
}
}
}
```
3. 对于每个修改的 .java 文件,使用 JavaParser 库解析出其 AST,并遍历 AST 找到修改的类。
```java
FileInputStream in = new FileInputStream(filePath);
CompilationUnit cu = JavaParser.parse(in);
List<TypeDeclaration<?>> types = cu.getTypes();
for (TypeDeclaration<?> type : types) {
if (type instanceof ClassOrInterfaceDeclaration) {
ClassOrInterfaceDeclaration classDeclaration = (ClassOrInterfaceDeclaration) type;
String className = classDeclaration.getNameAsString();
// 判断该类是否被修改
if (isClassModified(className, logEntry)) {
// 处理修改的类
}
}
}
```
4. 判断该类是否被修改,可以使用 SVNKit 的 `SVNLogEntryPath` 中的 `getCopyPath()` 和 `getCopyRevision()` 方法来判断该文件是否是复制或重命名,以及其所复制或重命名的文件是否在当前变更集中。
```java
private boolean isClassModified(String className, SVNLogEntry logEntry) {
Map<String, SVNLogEntryPath> changedPaths = logEntry.getChangedPaths();
for (Map.Entry<String, SVNLogEntryPath> entry : changedPaths.entrySet()) {
SVNLogEntryPath path = entry.getValue();
String filePath = path.getPath();
if (filePath.endsWith(".java") && (path.getType() == SVNLogEntryPath.TYPE_ADDED || path.getType() == SVNLogEntryPath.TYPE_MODIFIED)) {
if (filePath.endsWith(className + ".java")) {
return true;
}
String copyPath = path.getCopyPath();
if (copyPath != null && copyPath.endsWith(className + ".java")) {
long copyRevision = path.getCopyRevision();
if (copyRevision >= logEntry.getRevision() - 10 && copyRevision <= logEntry.getRevision()) {
return true;
}
}
}
}
return false;
}
```
这样,就可以解析 SVN 路径下的 .java 文件,并获取修改的类了。不过需要注意的是,由于 SVNKit 是通过 SVN 服务器获取文件历史记录的,所以需要确保你有足够的权限访问该 SVN 服务器。
阅读全文