在这样一个结构的项目中测试p309 例子4,
项目名为ToDo,有三个模组,其中并没有与ToDo同名的模组,Test即是本次的测试代码。
Test.java
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
int n = -1;
byte[] a =new byte[100];
try {
File file = new File("src\\Test.java");
InputStream in = new FileInputStream(file);
while ((n=in.read(a,0,100)) != -1) {
String s = new String(a,0,n);
System.out.println(s);
}
in.close();
}catch (IOException e) {
System.out.println("File read error" + e);
}
}
}
运行发现报错,没有找到Test.java,不能进行读操作。也就是说初始目录并不在模组ToDoList上。
为了找到初始目录,创建一个文件,找到它的位置来定位初始目录
修改Test.java
-
。
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class Test { public static void main(String[] args) { int n = -1; byte[] a =new byte[100]; try { File file = new File("new.txt"); if(!file.exists()) { file.createNewFile(); } /*InputStream in = new FileInputStream(file); while ((n=in.read(a,0,100)) != -1) { String s = new String(a,0,n); System.out.println(s); } in.close();*/ }catch (IOException e) { System.out.println("File read error" + e); } } }
然后在ToDo文件夹下找到new.txt
因此例子4的修改如下
-
import java.io.File;
-
import java.io.FileInputStream;
-
import java.io.IOException;
-
import java.io.InputStream;
-
public class Test {
-
public static void main(String[] args) {
-
int n = -1;
-
byte[] a =new byte[100];
-
try {
-
File file = new File("..\\ToDoList\\src\\Test.java");
-
InputStream in = new FileInputStream(file);
-
while ((n=in.read(a,0,100)) != -1) {
-
String s = new String(a,0,n);
-
System.out.println(s);
-
}
-
in.close();
-
}catch (IOException e) {
-
System.out.println("File read error"+e);
-
}
-
}
-
}
..表示上一个目录即父目录。这次程序能够正常运行
本次的文件夹结构特点,各个与项目名不同名的模组单独成一个与项目文件夹同级的文件夹,均位于IdeaProject中,里面只有一个src文件夹而没有out文件夹,因此.class文件储存在项目文件夹的out文件夹中。若有模组与项目同名,则共用一个文件夹。
我这次的实例来说,文件夹结构是这样的
ToDo的out存放项目下所有模组的字节码文件,
不同名模组下只有src文件夹。
值得注意的是,一个模组下还可以创建子模组,包下也可以创建子包。
这样来看书本的例子并不是在Idea下写的,因此某些地方照着书上写的话会出错。而事实上Idea不同的地方不止这个,比如说我最近发现的Idea的run其实并不是控制台,而是重定向的自己的窗口。从而导致在控制台下能够使用的比如清空屏幕输出的方法在Idea下是没有效果的。