在JAVA中我得到两个文件流,一个是本地的,一个是服务器上的,怎么将本地的流写入到服务器的流中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JAVA中我得到两个文件流,一个是本地的,一个是服务器上的,怎么将本地的流写入到服务器的流中相关的知识,希望对你有一定的参考价值。
服务器的流是通过HttpURLConnection转换URL得到的,就想实现一个在线编辑的功能,把更改的文件流写到服务器上的原文件中
你写个接口就行。不过还是要放在服务器上跑。印象中只能写本地吧。就是你把接口程序放服务器上。写文件的过程和本地是一样的 参考技术A HttpURLConnection貌似是web交互,如果需要与web交互的话在服务器上你得先写一个asp文件或者其他jsp等文件。建议查阅java与web交互这一块的内容。这个页面挺详细的,你应该能看得懂的吧。http://blog.csdn.net/a9529lty/article/details/6454145如果要直接写到服务器上,或者采用socket,当然,服务器也需要有socketserver。 参考技术B 用Socket
HttpURLConnection只能读取服务器的数据不能往服务器传输数据
在 Java 中使用 IO 流
【中文标题】在 Java 中使用 IO 流【英文标题】:Using IO Streams in Java 【发布时间】:2010-12-22 21:19:43 【问题描述】:我需要使用 Java 启动一个二进制文件,然后使用输入和输出流与之交互。我编写了一个原型来弄清楚它是如何工作的,但到目前为止我得到的唯一输出是null
。然而,当独立运行时,子程序会产生输出。我做错了什么?
import java.io.*;
public class Stream
public static void main(String args[])
Process SaddleSumExec = null;
BufferedReader outStream = null;
BufferedReader inStream = null;
try
SaddleSumExec = Runtime.getRuntime().exec("/home/alex/vendor/program weights.txt list.txt");
catch(IOException e)
System.err.println("Error on inStream.readLine()");
e.printStackTrace();
try
inStream = new BufferedReader(new InputStreamReader
(SaddleSumExec.getInputStream()));
System.out.println(inStream.readLine());
catch(IOException e)
System.out.println("Error.");
【问题讨论】:
也许你的程序出错了,但除非你阅读它的输出(并显示它)你不会知道它是什么。我建议你使用 ProcessBuilder 来加入 err 和 out 流。 彼得,您能否提交您的评论作为答案,以便我接受?谢谢。 【参考方案1】:import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class Prompt
//flag to end readers and writer
boolean processEnd = false;
public static void main(String[] args)
new Prompt();
public Prompt()
Process SaddleSumExec = null;
Input in = new Input(this);
Output out = new Output(this);
Input err = new Input(this);
//thread to read a write console
Thread t1 = new Thread(in);
Thread t2 = new Thread(out);
Thread t3 = new Thread(err);
try
SaddleSumExec = Runtime
.getRuntime()
.exec(
"ConsoleApplication1/bin/Debug/ConsoleApplication1");
in.input = SaddleSumExec.getInputStream();
err.input = SaddleSumExec.getErrorStream();
out.out = SaddleSumExec.getOutputStream();
t2.start();
t1.start();
t3.start();
SaddleSumExec.waitFor();
processEnd = true;
catch (IOException e)
System.err.println("Error on inStream.readLine()");
e.printStackTrace();
catch (InterruptedException e)
e.printStackTrace();
public boolean isProcessEnd()
return processEnd;
public void setProcessEnd(boolean processEnd)
this.processEnd = processEnd;
/*Readers of Inputs*/
class Input implements Runnable
private BufferedReader inStream;
InputStream input;
Prompt parent;
public Input(Prompt prompt)
// TODO Auto-generated constructor stub
parent = prompt;
public void run()
inStream = new BufferedReader(new InputStreamReader(input));
while (!parent.isProcessEnd())
try
String userInput;
while ((userInput = inStream.readLine()) != null)
System.out.println(userInput);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
/*Writers of Output*/
class Output implements Runnable
OutputStream out;
Prompt parent;
public Output(Prompt prompt)
parent = prompt;
// TODO Auto-generated constructor stub
@Override
public void run()
while (!parent.isProcessEnd())
try
String CurLine = "";
InputStreamReader converter = new InputStreamReader(
System.in);
BufferedReader in = new BufferedReader(converter);
while (!(CurLine.equals("quit")))
CurLine = in.readLine();
if (!(CurLine.equals("quit")))
out.write((CurLine + "\n").getBytes());
out.flush();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
【讨论】:
【参考方案2】:您似乎没有等待子进程结束,因此父进程可能在它有机会读取输出流之前就结束了。
这是一篇关于 Runtime.exec 的古老但优秀的文章
http://www.javaworld.com/jw-12-2000/jw-1229-traps.html
正确的实现在这个页面上
http://www.javaworld.com/jw-12-2000/jw-1229-traps.html?page=4
【讨论】:
【参考方案3】:据我所知 - 这里可能有两个问题:
-
您是否尝试在子程序开始读取之前获得对流的访问权限?
您是否正在运行访问权限不足的父进程?
【讨论】:
(1) 没有任何意义。我假设您的意思是“写作”,但它仍然没有任何意义。它是一个 Reader,它会阻塞直到数据可用。【参考方案4】:如果您从 readLine() 中读取 null,则表示对等方已关闭流。没有输出。
【讨论】:
以上是关于在JAVA中我得到两个文件流,一个是本地的,一个是服务器上的,怎么将本地的流写入到服务器的流中的主要内容,如果未能解决你的问题,请参考以下文章