如何使用Java中的递归和流从文件输出字符串行

时间:2011-11-29 06:41:37

标签: java recursion input stream

sldls slfjksdl slfjdsl
ldsfj, jsldjf lsdjfk

这些字符串行来自名为“input”的文件。

如何通过在Java中使用输入,输出流和递归将这些字符串行以相反的顺序输出到名为“ouput”​​的文件?

2 个答案:

答案 0 :(得分:0)

我不会把整个代码放在这里,但我会从每个关键区域放置一些段,希望你能想出把所有内容放在一起。

以下是你应该如何反转给定的字符串

public static String reverseString(InputStream is) throws IOException {
 int length = is.available();
 byte[] bytes = new byte[length];
 int ch = -1;
 while ((ch = is.read()) != -1) {
  bytes[--length] = (byte) ch;
 }
 return new String(bytes);
}

这就是你的主要方法应该如何调用上面的函数。

InputStream is = new FileInputStream(f);
String reversedString = reverseString(is);

最后希望你通过玩弄这个来弄清楚如何写一个文件。

  try{
  // Create file 
  FileWriter fstream = new FileWriter("/Users/anu/GroupLensResearch/QandA/YahooData/L16/out.txt");
  BufferedWriter out = new BufferedWriter(fstream);
  out.write(reverseRead(is));
  //Close the output stream
  out.close();
  }catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }

答案 1 :(得分:0)

这不是Java最佳实践的一个例子,但是它起作用并且应该足以让你开始

public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException, IOException {

    Scanner scanner = new Scanner(new File("infile.txt"), "UTF-8");
    FileOutputStream fileOutputStream = new FileOutputStream("outfile.txt");
    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "UTF-8");  
    recurse(scanner, outputStreamWriter);
    outputStreamWriter.close();
}
static void recurse(Scanner scanner, OutputStreamWriter outputStreamWriter) throws IOException {
    String line = scanner.nextLine();
    if (scanner.hasNext())
        recurse(scanner, outputStreamWriter);
    outputStreamWriter.write(line + "\n");
}

如果您使用系统的默认编码,则可以删除Scanner和OutputStreamWriter的第二个编码参数。