如何使用在我的 windows 机器上运行的 java 代码写入 linux 中的文件?
How can I write to a file in linux using java code which runs on my windows machine?
我的应用程序服务器托管在 Linux 有 Tomcat 服务器。我想通过我的 windows 机器上 运行 的 Java 代码更改一些文件。我该怎么做?我知道如何通过 Java 连接到 Linux,但不知道用于写入、追加或清除文件的命令。
非常感谢!
如果您正在尝试使用 Java 执行文件操作,请查看此 tutorial 以及有关读取、写入、创建和打开文件的文档。
下面是从文件读取和写入文件的示例代码。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.FileSystems;
import java.nio.file.Files;
public class FileOps {
public static void main(String[] args) {
readFile();
writeFile();
}
private static void readFile() {
Charset charset = Charset.forName("US-ASCII");
try (BufferedReader reader = Files.newBufferedReader(FileSystems.getDefault().getPath("/path/on/disk/file1.txt"), charset)) {
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException x) {
System.err.format("IOException: %s%n", x);
}
}
private static void writeFile() {
Charset charset = Charset.forName("US-ASCII");
String s = "Sample Java Code";
try (BufferedWriter writer = Files.newBufferedWriter(FileSystems.getDefault().getPath("/path/on/disk/file2.txt"), charset)) {
writer.write(s, 0, s.length());
} catch (IOException x) {
System.err.format("IOException: %s%n", x);
}
}
}
您可以使用外部库来做到这一点 JSch。
下面应该做的工作。
JSch jsch = new JSch();
Session session = jsch.getSession("remote_user_name", "remote_host_or_ip", 22); // 22 for SFTP
session.setPassword("remote_password");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(10000);
Channel channel = session.openChannel("sftp");
channel.connect();
System.out.println("Connection Opened");
ChannelSftp channelSftp = (ChannelSftp) channel;
InputStream inputStream = new FileInputStream("text_file.txt");
channelSftp.put(inputStream, "/remote/folder/file_to_be_rewritten.txt");
System.out.println("File should be uploaded");
channelSftp.disconnect();
session.disconnect();
您的服务器应提供 REST API 以允许通过 HTTP 请求修改文件。这样,您可以管理对文件的所有更新,并防止文件因尝试使用同步块、锁或参与者进行多个并发更新而损坏。
但是,您还应该考虑将文件的内容存储在数据库中(SQL 或否SQL)而不是文件。这将以更易于管理的方式处理并发控制,尤其是在更新是原子的(一行或一个文档)时。
我的应用程序服务器托管在 Linux 有 Tomcat 服务器。我想通过我的 windows 机器上 运行 的 Java 代码更改一些文件。我该怎么做?我知道如何通过 Java 连接到 Linux,但不知道用于写入、追加或清除文件的命令。
非常感谢!
如果您正在尝试使用 Java 执行文件操作,请查看此 tutorial 以及有关读取、写入、创建和打开文件的文档。
下面是从文件读取和写入文件的示例代码。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.FileSystems;
import java.nio.file.Files;
public class FileOps {
public static void main(String[] args) {
readFile();
writeFile();
}
private static void readFile() {
Charset charset = Charset.forName("US-ASCII");
try (BufferedReader reader = Files.newBufferedReader(FileSystems.getDefault().getPath("/path/on/disk/file1.txt"), charset)) {
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException x) {
System.err.format("IOException: %s%n", x);
}
}
private static void writeFile() {
Charset charset = Charset.forName("US-ASCII");
String s = "Sample Java Code";
try (BufferedWriter writer = Files.newBufferedWriter(FileSystems.getDefault().getPath("/path/on/disk/file2.txt"), charset)) {
writer.write(s, 0, s.length());
} catch (IOException x) {
System.err.format("IOException: %s%n", x);
}
}
}
您可以使用外部库来做到这一点 JSch。 下面应该做的工作。
JSch jsch = new JSch();
Session session = jsch.getSession("remote_user_name", "remote_host_or_ip", 22); // 22 for SFTP
session.setPassword("remote_password");
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(10000);
Channel channel = session.openChannel("sftp");
channel.connect();
System.out.println("Connection Opened");
ChannelSftp channelSftp = (ChannelSftp) channel;
InputStream inputStream = new FileInputStream("text_file.txt");
channelSftp.put(inputStream, "/remote/folder/file_to_be_rewritten.txt");
System.out.println("File should be uploaded");
channelSftp.disconnect();
session.disconnect();
您的服务器应提供 REST API 以允许通过 HTTP 请求修改文件。这样,您可以管理对文件的所有更新,并防止文件因尝试使用同步块、锁或参与者进行多个并发更新而损坏。
但是,您还应该考虑将文件的内容存储在数据库中(SQL 或否SQL)而不是文件。这将以更易于管理的方式处理并发控制,尤其是在更新是原子的(一行或一个文档)时。