我如何使用在我的windows机器上运行的java代码在linux中写入一个文件?

1 人关注

我的应用服务器托管在Linux上,有Tomcat服务器。我想通过运行在我的windows机器上的Java代码来改变一些文件。我怎样才能做到这一点?我知道如何通过Java连接到Linux,但不知道用于写入、追加或清除文件的命令。

非常感谢!

3 个评论
你的问题并不清楚,至少对我来说是这样......。
你想在你的windows桌面上运行一个程序,并想在linux服务器上对一些文件做一些修改? 问题是这样的吗?
是的,那是一个问题。
java
linux
jsch
thisisdude
thisisdude
发布于 2018-04-28
3 个回答
xagaffar
xagaffar
发布于 2018-04-28
已采纳
0 人赞同

你可以用外部库来做这件事 JSch . The below should do the job.

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();
    
谢谢这段代码,我在一台服务器上打了,在另一台服务器上观察了。
Robin Green
Robin Green
发布于 2018-04-28
0 人赞同

你的服务器应该提供一个REST API,允许通过HTTP请求来修改文件。这样,你就可以管理文件的所有更新,并防止文件因试图进行多个并发更新而被破坏,使用同步块、锁或演员。

然而,你也应该考虑将文件的内容存储在数据库(SQL或NoSQL)中,而不是文件。这将以一种更容易管理的方式处理并发控制,特别是如果更新是原子性的(一条记录或一个文件)。

Jagrut Sharma
Jagrut Sharma
发布于 2018-04-28
0 人赞同

如果你想用Java来进行文件操作,可以看看这个 教程 和关于读、写、创建和打开文件的文件。

下面是从文件中读取和写入文件的示例代码。

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) {