通过IO库将public class Test
{
   public static void main(String[] args)
   {
      //Some statements
   }
}
改成public class Test{
   public static void main(String[] args){
      //Some statements
   }
}
下面是我写的代码package ex09;
import java.io.*;
import java.util.*;
import javax.swing.JFileChooser;public class ex09_16 { /**
 * @param args
 */
public static void main(String[] args) throws Exception{
// TODO 自动生成方法存根
JFileChooser fileChooser=new JFileChooser();
if(fileChooser.showOpenDialog(null)
==JFileChooser.APPROVE_OPTION){
File sourceFile=fileChooser.getSelectedFile();


Scanner input=new Scanner(sourceFile);
PrintWriter output=new PrintWriter(sourceFile);
while(input.hasNext()){
while(input.next().equals("{")){
output.println("\r{");
}
}
input.close();
output.close();
}

}}每次运行后我选的文件后就变为空,里面什么都没有了
不知道哪里不对

解决方案 »

  1.   

    不明白楼主为什么要这么费事、、、
    直接用IDE里的“格式化代码”改一下模板不就好了、、、
    Eclipse、Netbeans都有代码格式化功能、、、
      

  2.   

    怪我自己没说清楚
    我是想通过java的IO库自己写的程序把
    一个简单的次行块风格的代码变成一个行尾式风格的代码
    例如,将public class Test
    {
       public static void main(String[] args)
       {
          //Some statements
       }
    }
    改写成public class Test{
       public static void main(String[] args){
          //Some statements
       }
    }
      

  3.   

    代码稍微改下
    while(input.hasNext()){
        if(input.next().equals("{")){
             output.println("{");
        }
        else{
            output.print(input.next());
        }
    }
    没经过测试 不知道对不对,lz自己测测
      

  4.   

    有时候还报错
    Exception while removing reference: java.lang.InterruptedException
    java.lang.InterruptedException
    at java.lang.Object.wait(Native Method)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    at java.lang.ref.ReferenceQueue.remove(Unknown Source)
    at sun.java2d.Disposer.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    然后被选中的文件就被“格式化”了,里面什么也没有了
      

  5.   

    PrintWriterpublic PrintWriter(File file)
                throws FileNotFoundException
    使用指定文件创建不具有自动行刷新的新 PrintWriter。此便捷构造方法创建必要的中间 OutputStreamWriter,后者将使用此 Java 虚拟机实例的默认 charset 进行字符编码。
    参数:
    file - 作为此 writer 的目标使用的文件。如果存在该文件,则将其大小截取为零;否则,创建一个新文件。将输出写入文件中,并对其进行缓冲处理。
    抛出:
    FileNotFoundException - 如果给定的文件对象不表示现有的可写常规文件,并且无法创建该名称的新常规文件,或者在打开或创建文件时发生其他一些错误
    SecurityException - 如果存在安全管理器,并且 checkWrite(file.getPath()) 拒绝对文件进行写入访问。
    从以下版本开始:
    1.5建议楼主多看API,文件内容清空的问题应该明白了。
    所以格式化后的代码放到了当前目录下的同名文件中。
    代码的逻辑好像也有问题,下面是我写的一段示例代码,楼主可以参考参考。
    import java.io.*;
    import java.util.*;
    import javax.swing.JFileChooser;public class Main { private static final String NONE = "NONE";//当读取的第二行没有时,设置为该字符串

    public static void main(String[] args) throws Exception {
    JFileChooser fileChooser = new JFileChooser();
    if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
    File sourceFile = fileChooser.getSelectedFile(); Scanner input = new Scanner(sourceFile);
    PrintWriter output = new PrintWriter(new File(sourceFile.getName()));

    //每次都去读两行(如果第二行没有的话,就设置为"NONE")
    String first = "";//保存读取到的第一行
    String second = "";//保存读取到的第二行
    input.useDelimiter("\r\n");//设置分割符为换行。默认情况下该分隔符模式与空白匹配
    while (input.hasNext()) {
    first = input.next();//读取第一行
    if(input.hasNext()) {//如果第二行存在的话,读取第二行
    second = input.next();
    } else {//如果没有第二行,就设置为"NONE"
    second = NONE;
    }

    //如果第二行为"{",就把第二行加到第一行后面写到文件中
    if(second.trim().equals("{")) {
    output.println(first + second);
    } else {//否则的话,先输出第一行,如果第二行存在的话,接着输出第二行
    output.println(first);
    if(!second.equals(NONE)) {
    output.println(second);
    }
    }
    }
    input.close();
    output.close();
    } }}
      

  6.   

    就像6楼说的,楼主你同时读和写同一个文件,当然会抛InterruptedException异常。原来的代码页不能实现你格式化代码的初衷,还是用6楼的代码试试吧