java练习中报错:java.io.FileNotFoundException: d:\exercise12_2.txt (文件名、目录名或卷标语法不正确。)

写这篇博客的意图

在记录下这个错误的过程中,顺便熟悉一下MarkDown语法,方便以后的学习,参考内容如下

  1. 百度中的MarkDown语法1

错误的起源

学习java语言的过程中,碰到了难题,java IO,所以看完了java IO之后呢,就来做做题练习一下,然后在做第二题的过程碰到了这个错误

完整的题目

从键盘输入文件的内容和要保存的文件名称,然后根据输入的名称创建文件,并将内容保存到文件中。

我的错误代码

import java.util.Scanner;
import java.io.*;

public class exercise12_2 {
    
    
	public static void main(String[] args) {
    
    
		Scanner scan=new Scanner(System.in);
		OutputStream out=null;
		scan.useDelimiter("\n");
		String str=scan.next();
		File file=new File("d:"+File.separator+str);
		str=scan.next();
		byte b[]=str.getBytes();
		try {
    
    
			out=new FileOutputStream(file);
			out.write(b);
			out.close();
			}catch(IOException e) {
    
    
			e.printStackTrace();
		}
	}
}

输入的内容和报错的内容

报错

我是用的是Eclipse,此处顺便提供几个快捷键:

  • 程序编写完成之后,按下F11可以直接运行;
  • 调试的时候,按下F5F6可以单步往下运行
    • F5是会进入当前语句的调用部分,可以看到深层的运行过程
    • F6则是简单的运行这一语句后进入下一条语句

寻找错误原因

首先我们来查看报错的地点和原因,可知报错的位置是:

out=new FileOutputStream(file);

我们知道,如果文件不存在那么应该是会自动创建文件的,所以绝对不是没有创建文件。那么这里的报错应该是:创建文件失败

那么为什么会创建失败呢?

经过一番调试,在程序中加断点,查看变量内容之后,发现了这样现象:
变量
会发现,str是文件名,然后str的值后面多出了\r,所以,这样的文件名不可能正确的创建文件。

那么\r又是哪里来的呢?

经过百度一番查找,终于找到了热心网友的解释:

换行符就是另起一新行,光标在新行的开头;
回车符就是光标回到一旧行的开头;(即光标目前所在的行为旧行)
——————————————————————
所以我们平时编写文件的回车符(即:回车键 )应该确切来说叫做回车式的换行符。
即,我们的换行符通过键盘上的回车键来实现。
也即键盘上的回车键是用来进行实现换行符的。
也即键盘上的回车键不是用来进行实现回车符的。
——————————————————————
换行符’\n’   ASCII值为10,换行(newline begin)
回车符’\r’   ASCII值为13,回车(return oldline begin)
也可以表示为 ‘\x0a’ 和 ‘\x0d’ (16进制表示)
——————————————————————
在windows系统下,回车式的换行符号是"\r\n";
但是在Linux等系统下是没有"\r"符号的。

注意:在我的代码中,有这样一条语句:

scan.useDelimiter("\n");

这就是报错的罪魁祸首,因为我们按回车是\r\n,所以就导致了,输入了回车键之后,只把\n作为了分隔符,然后\r遗留在了str中,所以文件名就错了,无法创建文件。

修改错误

知道了错误原因,于是乎修改上面的语句为

scan.useDelimiter("\r\n");

然后重新运行程序
输入同样的内容得到的结果
塔塔,大功告成!

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G


  1. markdown百度百科 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_45795947/article/details/107896682