2012-01-15 86 views
2

我试图读取一个.java文件并尝试使用下面的代码将其写入另一个文件。使用java.nio读取其他文件后,无法写入文件

import java.nio.charset.Charset; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 

public class JavaToHtml 
{ 
    private Path actualPath; 
    private Path targetPath; 
    private Path sourcePath; 

    private BufferedReader reader; 
    private BufferedWriter writer; 

    public JavaToHtml(String source, String target) 
    { 
     sourcePath = Paths.get(source); 
     sourcePath = sourcePath.toAbsolutePath(); 
     actualPath = Paths.get(target); 
     targetPath = actualPath.toAbsolutePath(); 

     Charset charset = Charset.forName("US-ASCII"); 

     try 
     { 
      reader = Files.newBufferedReader(sourcePath, charset); 
      writer = Files.newBufferedWriter(targetPath, charset); 

      String line = null; 
      while((line = reader.readLine()) != null) 
      { 
          // This thing is working. 
       System.out.println(line); 
          // This thing is not working. 
       writer.write(line, 0, line.length()); 
      } 
     } 
     catch(IOException ioe) 
     { 
      ioe.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) 
    { 
     new JavaToHtml(args[0], args[1]); 
    } 
} 

现在的问题是,在我的while循环,我能够读取源文件没有任何问题,但其中创建新文件(目标)始终是空的。此外,编译器不会在编译时或运行时抛出错误。难道我做错了什么 ?请给我一些亮点,因为这是我的第一个问题。

问候

回答

3

不要忘记关闭的BufferedWriter和BufferedReader,当你不需要他们了:

reader.close(); 
writer.close(); 

The Java Tutorials

缓冲输入流从读取数据称为缓冲区的内存区域; 仅当缓冲区为空时,本地输入API才称为。 类似地,缓冲输出流将数据写入缓冲区,并且仅当缓冲区已满时,本地输出API才称为

随着close()叫你暗中告诉它刷新缓冲区,并关闭它...

+0

你应该详细说明一下,并解释为什么如果缓冲流未关闭(实际刷新),为什么不写入任何内容,并坚持这些应该都在finally块中关闭。 – 2012-01-15 12:17:28

+0

@PrimosK:谢谢,关闭这两件事整理了我的东西。但是,你能否说明为什么发生这种情况?祝福你。 Regards – 2012-01-15 12:18:49

+0

@JBNizet:你能告诉我为什么发生了,关闭这两件事情为我整理了一些东西吗?问候 – 2012-01-15 12:21:02

1

另一种选择是刚才的所有数据保存到一个字符串,然后写下来,该字符串与writer.write( STR)。这只适用于数据不大的情况(否则你会得到一个内存不足的例外)。 你也应该刷新作家每次当您添加一条线,只是为了确保一切都在那里:

writer.flush() 
+0

写入方法中的偏移量参数是从给定字符串开始的偏移量。它用于编写给定参数的子字符串。这条线非常好。 – 2012-01-15 12:24:22

+0

@ ins0m:信息+1,谢谢你。问候 – 2012-01-15 12:27:10

+0

我刚刚意识到这一点。谢谢(你的)信息。实际上,两个人清除了他们的想法;)编辑我的答案,不要说废话。 – ins0m 2012-01-15 12:28:22

1

做的flush(),刻录机的打印文件上的文件的内容,使之可以从已放置的内容中释放缓冲区。

+0

Thankx的信息。 Registers – 2012-01-25 09:47:39

+0

@GagandeepBali对不起,在这里发帖,为什么你的网站不工作? – 2013-02-21 17:58:43

+0

@joeyrohan:其实我从家里的电脑免费托管那个网站。所以当我关闭我的电脑时,该网站也停止了:-)。我把电脑开着几个星期,但是现在每天我开始关闭它(尽管现在我的电脑已经开启,但我猜测它正在工作:-),我可能会在明天关闭它。 – 2013-02-21 18:30:16