-------------------
读文件输出到终端范例代码:
import java.io.*;class readfile{
public static void main(String[] args)throws IOException,ArrayIndexOutOfBoundsException{
File f=new File(args[0]);
if(f.exists()){
FileReader Rfile=new FileReader(f);
BufferedReader r=new BufferedReader(Rfile);
String value=r.readLine();
while(true){
System.out.println(value);
if(value==null) break;
value=r.readLine();
}
Rfile.close();
}
}
}
-------------------
因为初学,所以想参照以上代码我打算写个复制文件的代码加深理解应用
以下代码是昨天初贴完全没修改的
后来求教csdn各位以后终于完成了目的
但是后来细细研究这个错误代码的时候,两个>>>>>>输出语句中间抛出的空引用异常是怎么抛出的一直都不明白line是因为引用了R1.我在//read file1里面还有异常语句前用输出语句调试,输出的果然都是null 这是为什么啊?读文件部分明明是照示范代码写的.示范代码也调试过了,没错..
只关于此异常不探讨其他错误 求解!
------------------------------------------
初始代码:
import java.io.*;public class filetest{
public static void main(String[] args) throws IOException{
try{
File f1=new File(args[0]);
File f2=new File(args[1]);
//new file1
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
FileWriter writef1=new FileWriter(f1);
BufferedWriter w1=new BufferedWriter(writef1);
//read file1
System.out.println(f1);
FileReader r1=new FileReader(f1);
BufferedReader R1=new BufferedReader(r1);
System.out.println(R1.readLine());
//write file2
FileWriter writef2=new FileWriter(f2);
BufferedWriter w2=new BufferedWriter(writef2);
//这里f1.exists()的值也是1
if(!f1.exists()) {
f1.createNewFile();
System.out.println("文件"+args[0]+"不存在!新建..\n请输入文件内容:\n");
while(true){
System.out.print(">");
String line =stdin.readLine();
if(line!=null&&line.equals("quit")){
break;
}else w1.write(line);
}
}else{
System.out.println("文件 "+args[0]+" 已存在,复制到文件 "+args[1]+" 中.. ");
}
f2.createNewFile();
while(true){
System.out.println(R1.readLine());
String line=R1.readLine();
System.out.println(">>>>");
line=line.toUpperCase();
System.out.println(">>>>");
if(line!=null){
break;
}else w2.write(line);
}
w2.flush();
w2.close();
w1.flush();
w1.close();
writef2.close();
writef1.close();
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("没有输入参数,或参数不匹配");
}
}
}
----------------------------------------------------
读文件输出到终端范例代码:
import java.io.*;class readfile{
public static void main(String[] args)throws IOException,ArrayIndexOutOfBoundsException{
File f=new File(args[0]);
if(f.exists()){
FileReader Rfile=new FileReader(f);
BufferedReader r=new BufferedReader(Rfile);
String value=r.readLine();
while(true){
System.out.println(value);
if(value==null) break;
value=r.readLine();
}
Rfile.close();
}
}
}
-------------------
因为初学,所以想参照以上代码我打算写个复制文件的代码加深理解应用
以下代码是昨天初贴完全没修改的
后来求教csdn各位以后终于完成了目的
但是后来细细研究这个错误代码的时候,两个>>>>>>输出语句中间抛出的空引用异常是怎么抛出的一直都不明白line是因为引用了R1.我在//read file1里面还有异常语句前用输出语句调试,输出的果然都是null 这是为什么啊?读文件部分明明是照示范代码写的.示范代码也调试过了,没错..
只关于此异常不探讨其他错误 求解!
------------------------------------------
初始代码:
import java.io.*;public class filetest{
public static void main(String[] args) throws IOException{
try{
File f1=new File(args[0]);
File f2=new File(args[1]);
//new file1
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
FileWriter writef1=new FileWriter(f1);
BufferedWriter w1=new BufferedWriter(writef1);
//read file1
System.out.println(f1);
FileReader r1=new FileReader(f1);
BufferedReader R1=new BufferedReader(r1);
System.out.println(R1.readLine());
//write file2
FileWriter writef2=new FileWriter(f2);
BufferedWriter w2=new BufferedWriter(writef2);
//这里f1.exists()的值也是1
if(!f1.exists()) {
f1.createNewFile();
System.out.println("文件"+args[0]+"不存在!新建..\n请输入文件内容:\n");
while(true){
System.out.print(">");
String line =stdin.readLine();
if(line!=null&&line.equals("quit")){
break;
}else w1.write(line);
}
}else{
System.out.println("文件 "+args[0]+" 已存在,复制到文件 "+args[1]+" 中.. ");
}
f2.createNewFile();
while(true){
System.out.println(R1.readLine());
String line=R1.readLine();
System.out.println(">>>>");
line=line.toUpperCase();
System.out.println(">>>>");
if(line!=null){
break;
}else w2.write(line);
}
w2.flush();
w2.close();
w1.flush();
w1.close();
writef2.close();
writef1.close();
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("没有输入参数,或参数不匹配");
}
}
}
----------------------------------------------------
解决方案 »
- 求高手帮忙啊 小弟非常感谢
- java.sql.SQLException: No suitable driver 在线等...
- 如何获取当前标签页的JEditPane的内容?
- java能调用winapi吗
- 高手请指教!
- throws 和 throw new RuntimeException 和 try-catch的区别,在什么情况下使用,三者之间的关系
- 帮帮忙给点见意想法什么的(很急)
- 寻找兼职程序员
- 菜鸟级的程序谁帮我看一下错在哪里,分数简直白送
- tomcat配置后,可以通过浏览器访问,但是java得HttpURLConnection访问总是失败。
- 求教帖子~懂swing和GUI的进~高手救命~
- 数学表达式 解析后运算 例如(3/x+exp(5*x)*x+sin(x))
//呵呵
package cn.cncn.file;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;class SmartFile{
SmartFile(){
}
public static void main(String [] args){//这个用于测试
SmartFile sf = new SmartFile();
Util.print(Util.pre());
sf.type(Util.dir()+Util.pre()+"test.txt");
sf.move("D:\\text.txt", "test.txt");
sf.move("C:", "test.txt","mytest");
//sf.copy("D:\\text.txt", "test.txt");
}
public void makedir(String file){
File y = new File (file);
y.mkdir();
Util.print(file);
}
public void move(String dest ,String src,String name){
String filename=dest+name;
try {
FileInputStream fis = new FileInputStream(src);
FileOutputStream fot = new FileOutputStream(filename);
byte buffer[ ] = new byte[1024];
fis.read(buffer);
fot.write(buffer);
Util.print("File"+src+"Move To->"+dest);
fis.close();
fot.close();
} catch (IOException e) {
Util.print("Failed To Move The File"+src);
Util.print("The Reason Is");
e.printStackTrace();
}
}
public void move(String dest ,String src){
move(dest,src,"");
}
public void del(String dest){
File file = new File(dest);
file.delete();
}
public void copy(String dest ,String filename){
move(dest,filename);
del(filename);
Util.print("Copy Completed");
}
public void type(String filename){
try {
BufferedReader BRin = new BufferedReader(new InputStreamReader(
new FileInputStream(filename)));
String str;
while ((str = BRin.readLine()) != null) {
System.out.println(">>" + str);
}
BRin.close();
} catch (IOException e) {
Util.print();
Util.print("IO-ExCeption");
e.printStackTrace();
}
}
}
package cn.cncn.file;public class Util {
public static String pre(){
String prefix =System.getProperty("file.separator");
return prefix;
}
public static String dir(){
String dir =System.getProperty("user.dir");
return dir;
}
public static void print(String str){
System.out.println(str);
}
public static void print(){
System.out.println("------------------------");
}
}
若f1不存在,在调用w1.flush();之前要写入的数据都保存在缓冲区中并没有真正写入文件,此时f1是个空文件,R1.readLine();返回null
//这个我倒是知道2.f1为空则R1.readLine();返回null
//这我也清楚,调试时候也输出了null3.若f1不存在,在调用w1.flush();之前要写入的数据都保存在缓冲区中并没有真正写入文件,此时f1是个空文件,R1.readLine();返回null
//但是在调试前自己建了文件并输入了东西保存以后也会有这个异常,而且程序执行后两个文件都会被清成0字节,真怪问:请问你的意思是说在读前要完成前面定义的写流吗?调用flush();什么的
不能同时创建输入输出流?应该不是这个意思吧,我乱了..
先判断f1是否存在,若存在就没必要创建对f1的输出流
你可以对照正确的程序看一下
------------------------------
喔,你是说要判断然后才写这个:
//new file1
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
FileWriter writef1=new FileWriter(f1);
BufferedWriter w1=new BufferedWriter(writef1);
那个异常是因为这个引起的吗?问:不过,那个引用是读文件的,这两者有关系吗?
line=line.toUpperCase();这句发出的
因为
String line=R1.readLine();
又因为
FileReader r1=newFileReader(f1);
BufferedReader R1=new BufferedReader(r1);
调试的时候知道r1的时候就是null
我一直想问的就是这个,为什么我以为你说:
先判断f1是否存在,若存在就没必要创建对f1的输出流
是让我去掉
//new file1
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
FileWriter writef1=new FileWriter(f1);
BufferedWriter w1=new BufferedWriter(writef1);我刚才去掉了这个然后手动建立1.txt 2.txt试验的确没有那个异常了如下:
-----------------------
import java.io.*;public class test{
public static void main(String[] args) throws IOException{
try{
File f1=new File(args[0]);
File f2=new File(args[1]);
//read file1
System.out.println(f1);
FileReader r1=new FileReader(f1);
BufferedReader R1=new BufferedReader(r1);
System.out.println(R1.readLine());
//write file2
FileWriter writef2=new FileWriter(f2);
BufferedWriter w2=new BufferedWriter(writef2);
while(true){
System.out.println(R1.readLine());
String line=R1.readLine();
line=line.toUpperCase();
if(line!=null){
break;
}else w2.write(line);
}
w2.flush();
w2.close();
writef2.close();
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("没有输入参数,或参数不匹配");
}
}
}----------------------
这下子可以读f1然后输出到终端了,但是写不进f2
诚心的菜菜的问两个问题1.很前面你好像说过,可是我不太明白
FileWriter writef1=new FileWriter(f1);
BufferedWriter w1=new BufferedWriter(writef1);
一开始有了这两句为什么会让
FileReader r1=newFileReader(f1);
BufferedReader R1=new BufferedReader(r1);
这两句拿到的引用是空?
是不是打开文件写的同时不允许读?就是不能同时在一个文件上建立输入和输出流?我犯的是不是这个错误?2.改成后面那个程序以后可以把f1读到终端了但是为什么没办法可以把f1写进f2注:改了程序以后都是手动建了f1: 1.txt f2: 2.txt来测试的.
System.out.println(R1.readLine());
String line=R1.readLine();
line=line.toUpperCase();
if(line!=null){
break;
}else w2.write(line);
}
================================================
三个错误:
1.System.out.println(R1.readLine());读出一行,R1指针移到下一行,String line=R1.readLine();读到的是下一行的内容了
2.应该先判断line是否为null再line.toUpperCase()
3.若line为null,则break。你写反了可以同时读写
我不是说程序没有问题,我是说那些问题都在昨天解决掉了
我想知道的只是那个空引用的问题,谢谢你提出的想法,不过目下我真的是只想知道这是为什么
-----------
TO CrazyGou
我当然知道啊
如前:
***************
异常是:
line=line.toUpperCase();这句发出的
因为
String line=R1.readLine();
又因为
FileReader r1=newFileReader(f1);
BufferedReader R1=new BufferedReader(r1);
调试的时候知道r1的时候就是null
我一直想问的就是这个,为什么我以为你说:
先判断f1是否存在,若存在就没必要创建对f1的输出流
是让我去掉
//new file1
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
FileWriter writef1=new FileWriter(f1);
BufferedWriter w1=new BufferedWriter(writef1);
...........
***************所以如果文件可以在同意时间使用输入和输出流的话这个异常是怎么发出来的?
是可以同时读写。但是,BufferedWriter写的时候是先写到缓冲区,当调用其flush或close方法的时候才将缓冲区内容写入文件,同时清空缓冲区。你上面readLine在前,flush在后,所以readLine的时候f1里面并没有内容。具体可以查API