把屏幕输出重定向到文本的问题——中间改成不同的文件(解决马上结贴)

hahu 2005-02-17 09:12:46
我的屏幕输出内容比较多
如果不断输出到同一个文件的话,会出现文件过大,打开都困难
于是考虑文件大小超过多大的时候重定向到别的文件
现在出现这样的问题,有时候重定向以后,不知道出了什么问题,重新定向的文件中无法获取输出
因为用JNI在C++中调用,出了什么错也不知道
public class OutputHelper {

private static PrintStream err = null;
private static PrintStream out = null;
private static PrintStream prtStream = null;
private OutputHelper() {
}

public static void redirectToFile(String errFileName) throws IOException {
if (err == null)
{
err = System.err;
out = System.out;
}
FileOutputStream errFile = new FileOutputStream(errFileName);
prtStream=new PrintStream(errFile);
System.setOut(prtStream);
System.setErr(prtStream);
}

public static boolean resetPrintStream() {
if (err != null && out != null)
{
System.setOut(out);
System.setErr(err);
}
if (prtStream != null)
{
prtStream.close();
prtStream = null;
}
return true;
}

}
调用的时候,最开始redirectToFile("a.txt")
文件超过2M时,resetPrintStream() 将a.txt改成其他名字,再redirectToFile("a.txt")
解决马上结贴
...全文
216 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fashchina 2005-03-09
  • 打赏
  • 举报
回复
up
hahu 2005-03-09
  • 打赏
  • 举报
回复
顶一下
hahu 2005-02-21
  • 打赏
  • 举报
回复
将a.txt改成其他名字-->是在我另外的代码里面实现的,并不是在上面,应该不会有问题


我调用redirectToFile的时候,先调用resetPrintStream()将流关掉了
也不是每次运行的时候都会有问题
好多次执行操作以后才偶然出现一次
谢谢各位
平淡面对 2005-02-20
  • 打赏
  • 举报
回复
我认为是改文件名时,会有问题。
通常一个打开的文件会被锁,你需要先关闭打开的文件,才能作文件更名。
pigo 2005-02-19
  • 打赏
  • 举报
回复


用log4j吧。

hongjun_han 2005-02-19
  • 打赏
  • 举报
回复
不知道你说的是不是这个意思,下面一个简单的程序 能够在文件大于100字节时换到另一个文件名。只是示范用。代码很不严格,不知道是不是满足你的要求了。哈哈
import java.io.*;
public class Redirect
{
public static void main(String args[])
{
int i = 0;
PrintStream pstream = null;
try{
File f = new File("c:\\a" + i +".txt");
System.out.println(f.length());
if (f.length() > 100)
{
++i;
f = new File("c:\\a" + i +".txt"); //把这儿换成你的 resetPrintStream() 类似的函数吧
}
pstream = new PrintStream(new FileOutputStream(f,true));
}
catch(Exception e)
{
e.printStackTrace();
}
System.setOut(pstream);
System.out.println("hhhhhhhhhhhhhhheihei 你看看这个呀");
pstream.close();
}

}
Saro 2005-02-19
  • 打赏
  • 举报
回复
楼主给的代码太少了。
会不会是多线程是资源竞争引发的问题?resetPrintStream()-->将a.txt改成其他名字也许是这里出的问题。
楼主将输出文件改成按当前时间决定输出文件名称看看。
dyhml 2005-02-18
  • 打赏
  • 举报
回复
redirectToFile
的时候忘了把上一个流关闭了?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧