diff --git a/.gitignore b/.gitignore
index 2edd7cd..2eb019e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,8 @@
# AWS User-specific
.idea/**/aws.xml
+/.idea
+/target
# Generated files
.idea/**/contentModel.xml
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..bf9e5a2
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+
+ com.example
+ cc-process-demo
+ 1.0-SNAPSHOT
+
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+
+
+ net.cyclingbits
+ claude-code-sdk-java
+ 1.2.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/example/CommandRunDemo.java b/src/main/java/com/example/CommandRunDemo.java
new file mode 100644
index 0000000..62f7029
--- /dev/null
+++ b/src/main/java/com/example/CommandRunDemo.java
@@ -0,0 +1,121 @@
+package com.example;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+public class CommandRunDemo {
+ public static void main(String[] args) {
+ executeClaudeCommand(new File("D:/test"), "创建一个测试文件到这个目录");
+ }
+
+ /**
+ * 执行命令
+ * @param dir 执行命令的目录
+ * @param command 执行的命令
+ * @return 执行是否正常完成
+ */
+ public static boolean executeCommand(File dir, String... command) {
+ try {
+ ProcessBuilder processBuilder = new ProcessBuilder(command);
+ if (!dir.exists()) {
+ if (!dir.mkdirs()) {
+// throw new BusinessException("创建目录失败");
+ }
+ }
+ processBuilder.directory(dir);
+ processBuilder.redirectErrorStream(true);
+
+ Process process = processBuilder.start();
+
+ StringBuilder output = new StringBuilder();
+ try (BufferedReader reader = new BufferedReader(
+ new InputStreamReader(process.getInputStream()))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ output.append(line).append("\n");
+ System.out.println(line);
+ }
+ }
+
+ int exitCode = process.waitFor();
+ if (exitCode == 0) {
+// log.info("命令执行成功:{}", String.join(" ", command));
+ return true;
+ } else {
+// log.error("命令执行失败,退出码:{},输出:{}", exitCode, output);
+ return false;
+ }
+ } catch (Exception e) {
+// log.error("执行G命令异常:{}", String.join(" ", command), e);
+ return false;
+ }
+ }
+
+ /**
+ * 调用CC
+ * @param dir 访问目录
+ * @param prompt CC执行提示词
+ * @return 执行是否正常完成
+ */
+ public static boolean executeClaudeCommand(File dir, String prompt) {
+ try {
+// log.info("使用ClaudeCode执行提示词:{}", prompt);
+
+ ProcessBuilder processBuilder = new ProcessBuilder(
+ "claude", //需要保证claude在PATH中,某些npm的特殊安装方法可能不适用(如fnm安装)
+ "-p", prompt,
+ "--output-format", "stream-json",
+ "--dangerously-skip-permissions",
+ "--verbose"
+ );
+ processBuilder.directory(dir);
+
+// processBuilder.redirectErrorStream();// 将错误流重定向到标准输出流
+
+ Process process = processBuilder.start();
+
+ // claude的bug,不手工关闭输入流的话,会卡死
+ if (process.getOutputStream() != null) {
+ process.getOutputStream().close();
+ }
+
+ // 处理输入流(脚本输出内容)
+ new Thread(() -> handleStream(process.getInputStream(), false)).start();
+
+ // 处理错误流(脚本错误输出)
+ new Thread(() -> handleStream(process.getErrorStream(), true)).start();
+
+ int exitCode = process.waitFor();
+// log.info("ClaudeCode执行结束,结束码:{}", exitCode);
+ return exitCode == 0;
+ } catch (Exception e) {
+// log.error("使用ClaudeCode生成修复代码失败", e);
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
+ * 处理流
+ *
+ * @param inputStream 输入流
+ * @param error 是否为错误流
+ */
+ private static void handleStream(java.io.InputStream inputStream, boolean error) {
+ try (BufferedReader reader = new BufferedReader(
+ new InputStreamReader(inputStream, "GBK"))) { // 使用GBK编码适应Windows环境
+ String line;
+ while ((line = reader.readLine()) != null) {
+ if (error) {
+ System.err.println(line);
+ } else {
+ System.out.println(line);
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/SdkRunDemo.java b/src/main/java/com/example/SdkRunDemo.java
new file mode 100644
index 0000000..64f32ea
--- /dev/null
+++ b/src/main/java/com/example/SdkRunDemo.java
@@ -0,0 +1,29 @@
+package com.example;
+
+import kotlin.coroutines.Continuation;
+import kotlin.coroutines.CoroutineContext;
+import kotlinx.coroutines.flow.Flow;
+import net.cyclingbits.claudecode.api.ClaudeCodeClient;
+import net.cyclingbits.claudecode.types.*;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ *
+ * @author lroyia
+ * @since 2026/1/9 20:54
+ **/
+public class SdkRunDemo {
+
+ public static void main(String[] args) {
+ ClaudeCodeClient claudeCodeClient = new ClaudeCodeClient();
+ ClaudeCodeOptions options = ClaudeCodeOptions.builder()
+ .permissionMode(PermissionMode.BYPASS_PERMISSIONS)
+// .cwd()// 设置工作路径
+ .build();
+ List join = claudeCodeClient.queryAsync("在当前目录创建一个空的test.txt文件", options).join();
+ join.forEach(System.out::println);
+ }
+}