当前位置: 动力学知识库 > 问答 > 编程问答 >

java - exception thrown while using .txt in file name

问题描述:

I am trying to run the following code in which i have to save my file as .txt...but whenever I click on 'Save' button..it throws an exception..

Also i want to know how could I save the contents of my textarea line by line in the txt file (including \n).

Here is the code

try

{

int val = jfc.showSaveDialog(jf);

int x =0;

String line;

if(val == JFileChooser.APPROVE_OPTION)

{

File fs=jfc.getSelectedFile();

if(!fs.exists())

{

fs.createNewFile();

FileWriter fw=new FileWriter(fs.getAbsolutePath()+".txt");

BufferedWriter bf=new BufferedWriter(fw);

BufferedReader br = new BufferedReader(new StringReader(ja.getText()));

while((line= br.readLine())!=null)

{

x++;

if(line.charAt(x)=='\n')

fw.write('\n');

else

fw.write(line+"\n");

}

fw.close();

}

else

{

}

}

}

catch(Exception e2)

{

e2.printStackTrace();

JOptionPane.showMessageDialog(null,"Cannot save file");

}

java.lang.StringIndexOutOfBoundsException: String index out of range: 3

at java.lang.String.charAt(String.java:658)

at notepad$1.actionPerformed(notepad.java:100)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.AbstractButton.doClick(AbstractButton.java:376)

at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)

at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)

at java.awt.Component.processMouseEvent(Component.java:6505)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)

at java.awt.Component.processEvent(Component.java:6270)

at java.awt.Container.processEvent(Container.java:2229)

at java.awt.Component.dispatchEventImpl(Component.java:4861)

at java.awt.Container.dispatchEventImpl(Container.java:2287)

at java.awt.Component.dispatchEvent(Component.java:4687)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)

at java.awt.Container.dispatchEventImpl(Container.java:2273)

at java.awt.Window.dispatchEventImpl(Window.java:2719)

at java.awt.Component.dispatchEvent(Component.java:4687)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)

at java.awt.EventQueue.access$200(EventQueue.java:103)

at java.awt.EventQueue$3.run(EventQueue.java:694)

at java.awt.EventQueue$3.run(EventQueue.java:692)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)

at java.awt.EventQueue$4.run(EventQueue.java:708)

at java.awt.EventQueue$4.run(EventQueue.java:706)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

网友答案:

Change your current code from

while((line= br.readLine())!=null)
{
    x++;
    if(line.charAt(x)=='\n')
        fw.write('\n');
    else
        fw.write(line+"\n");
}

to

 while((line= br.readLine())!=null) {             
     fw.write(line+"\n");
 }
网友答案:

You are checking the first char in the first line, the second char in the second line so on.

Try changing

if(line.charAt(x)=='\n')

to

if(line.endsWith('\\n'))

Also you should escape line ends. Use \\n instead of \n.

分享给朋友:
您可能感兴趣的文章:
随机阅读: