请教高手一个“io流”的“文件写入读出”的问题....

时间:2022-09-23 09:52:40
高手,您好:
    我是一名学习软件工程的学生,现在,我正在“面壁修炼”,Java SE和io流,已经学习了快有半年的时间了,知识点已经掌握了,但是,没有做过太多的工程项目来巩固提高我的对于io流中的知识点的理解..
    最近,我开始通过实验,锻炼我对于Java的io部分的知识的理解与提高.并且锻炼我目前还没有经验的“调试运行时错误的能力”.
    我在D盘中建立了一个文件,如下:
    
请教高手一个“io流”的“文件写入读出”的问题....

    这个文件中的内容是:
     请教高手一个“io流”的“文件写入读出”的问题....
    我运行了写好的下面的程序:
    
package c_port_packageDoctor;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test5 {
File file = new File("D:\\MyDoc\\text.txt");
static DataOutputStream dops = null;
static FileOutputStream fops = null;

public Test5() {
// TODO Auto-generated constructor stub

try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);

}

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}

public static void start(){
try {
fops.write(19);
dops.writeInt(19);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

    代码运行后,在console窗口中给出的结果如下:
     请教高手一个“io流”的“文件写入读出”的问题....
    高手,我知道“空指针异常”表示“在程序中有对象或者变量,没有被"初始化"造成了程序访问到这个标志符后,为能够得到一个"堆内存中的地址”,但是,高手,经过我仔细地检查:
    我认为:
    在整个程序中,“不可能出现"让程序发生空指针的语句"存在”...
    整个程序并不复杂...
    希望得到高手的点拨:
    这里的“空指针异常”,出现的原因是什么...?
    并且,积累“调试运行时程序错误”的最快的学习方法是什么?
    看什么书?学习什么资源最快?
    谢谢高手的点拨!!
    一百分奉上!!
                                                             一位日日夜夜向着理想奔跑的筑梦者
                                                             2013年8月29日早晨5点58分

35 个解决方案

#1


希望高手尤其能够告诉我:
    学习=“调试较复杂多功能多线程im工具”的专业技术的书籍,有哪些?
    并且,网络中有什么资源,能够让我的学习计划,“最快”“最具效果”...?
    谢谢高手的点拨!!
     请教高手一个“io流”的“文件写入读出”的问题....

#2


。。。。。。
用debug调试走一下就清楚啦,start()方法里fops和dops都没有实例化。
debug很重要,必须学会!!
看这个视频
http://video.sina.com.cn/v/b/11881813-1281081403.html

#3


fops没有初始化。
fops的初始是在类创建对象的时候,而你是在static 方法里调用,却没有创建任何的Test5的对象,所以没有被初始化过。

#4


 fops和dops都没初始化,要先new一个Test5调用构造方法初始化。

#5


得new下Test5类,另外分隔符最好用File.separator。

#6


学会查错,
报错空指针
那你就看看哪一个是空,
debug调试停到这一行,你就会发现fops为空,
然后你肯定在想我不是在构造器中实例化该对象了么?
可以你可以在构造器中加一个输出语句看看是否有输出。。。
只有在实例对象的时候才会调用构造器。。。。

#7


根本就没有实例化兄弟。

#8


在构造函数中初始化,但是你又没有new Test5啊?

#9


你的文件名搞错了吧?把代码File file = new File("D:\\MyDoc\\text.txt")
改为File file = new File("D:\\MyDoc\\test.txt")试试。同时应该在前面做一下文件是否存在的判断处理。

#10


要么创建Test5的对象调用它的属性,要么把初始化工作放到静态代码块中

#11


Test5构造器根本没有运行,你的start是static方法.执行时候根本不用创建Test5实例

#12


 File file = new File("f:\\javasj\\hanruota.txt");// 我放在F盘了
       if (file.exists() && file.isFile()) {
           try {
               BufferedReader input = new BufferedReader(new FileReader(file));
               String text;
               while ((text = input.readLine()) != null)
                   txt.setText(txt.getText() + text + "\n");
           } catch (IOException ioException) {
               System.err.println("File Error!");
           }
       }
这个也许可以帮到你

#13


你的方法是静态的,也就是不需要new出类的实例就调用的,没有调用类的构造方法他怎么能够初始化的么

#14


楼主对Java的一些基本概念还需要再复习下,static关键字在class中的作用。

#15


public Test5() {
        // TODO Auto-generated constructor stub
 
        try {
            fops = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        dops = new DataOutputStream(fops);
         
    }

构造器中的代码没有执行,main函数中的代码改成new Test5(). start();

#16


没有new Test5 怎么实例化 你的 dops 和 fops

#17


楼主你把start()方法的static去了你就可以发现你的程序有什么bug了。

#18


引用 15 楼 a470577391 的回复:
public Test5() {
        // TODO Auto-generated constructor stub
 
        try {
            fops = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        dops = new DataOutputStream(fops);
         
    }

构造器中的代码没有执行,main函数中的代码改成new Test5(). start();

++

#19


package c_port_packageDoctor;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test5 {
File file = new File("D:\\MyDoc\\text.txt");
static DataOutputStream dops = null;
static FileOutputStream fops = null;

public Test5() {
// TODO Auto-generated constructor stub

try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);

}

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}

public static void start(){
try {
fops.write(19); ////在运行该方法之前没有new对象,所以fops为空啊,错误提示中不是说了37行空指针异常么,这种错误用不上调试一看就能看明白。还有就是如果你程序出异常那个对象也是出不来的,也可能为空。自己再好好学习下吧,看你学了半年好像基础还是不是很扎实。多做点小案例这才是最有效的学习方式。
dops.writeInt(19);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

#20


引用 12 楼 oLinHao007 的回复:
 File file = new File("f:\\javasj\\hanruota.txt");// 我放在F盘了
       if (file.exists() && file.isFile()) {
           try {
               BufferedReader input = new BufferedReader(new FileReader(file));
               String text;
               while ((text = input.readLine()) != null)
                   txt.setText(txt.getText() + text + "\n");
           } catch (IOException ioException) {
               System.err.println("File Error!");
           }
       }
这个也许可以帮到你

这个怎么没有关闭流呢?

#21


你是想读出还是写入,这个读出流你自己可以关闭的,就是file.flush();file.close();

#22


看到楼主,我放心了!楼主加油 请教高手一个“io流”的“文件写入读出”的问题....

#23


楼主难道是win7系统?

#24


请教高手一个“io流”的“文件写入读出”的问题.... 没有实例化类的过程导致你两个对象没有创建对象。你再去使用这两个对象,自然就是空指针咯。

#25


你根本没有实例化test5!
写的这个程序太乱,按照常规的思路和编写方式来写吧。

#26


 try {  
     // RandomAccessFile bw=new RandomAccessFile("F:\\test.txt","rw");
     // BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream("F:\\test.txt")); 
         // DataOutputStream bw=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));  
          PrintStream bw=new PrintStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt"))); 
       // PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter("F:\\test.txt")));  
        //设置文本内容  
      String str="writer in text";
            byte[] b=(str).getBytes();  
            //写入文件,还可以用其他方法如:write(String str)  
            bw.write(b,0,b.length);  
            bw.close();
           // pw.write(str);
           // pw.close();
            
        } catch (IOException ex) {  
           System.out.println(ex);  
        }  
//这里有几个方法都能实现,注释掉的你也行,自己换着试试吧

#27


不建议看书,建议看看张龙的视频,圣思园的。

#28


没执行你的构造方法啊 

#29


我觉得跟IO流没有关系,感觉还是先看下SE的基础知识吧。

#30


Test5()构造方法写的是初始化流,但是你没有调用啊,它肯定会抛出NullPointException

#31


还是同意#29楼的观点,,感觉跟IO没啥关系,强化一下自己的SE基础吧,基础打牢

#32


请教高手一个“io流”的“文件写入读出”的问题....大家说的都对

#33


面向对象,你操作的哪一行报空指针,你操作的那个对象就是为null。想问楼主是否真的弄懂了面向对象?

#34


从问题的难易程度,看到回答的人的个数,从而推断出大牛的比例

#35


你真的学了半年了,并且知识点都已经掌握了?

#1


希望高手尤其能够告诉我:
    学习=“调试较复杂多功能多线程im工具”的专业技术的书籍,有哪些?
    并且,网络中有什么资源,能够让我的学习计划,“最快”“最具效果”...?
    谢谢高手的点拨!!
     请教高手一个“io流”的“文件写入读出”的问题....

#2


。。。。。。
用debug调试走一下就清楚啦,start()方法里fops和dops都没有实例化。
debug很重要,必须学会!!
看这个视频
http://video.sina.com.cn/v/b/11881813-1281081403.html

#3


fops没有初始化。
fops的初始是在类创建对象的时候,而你是在static 方法里调用,却没有创建任何的Test5的对象,所以没有被初始化过。

#4


 fops和dops都没初始化,要先new一个Test5调用构造方法初始化。

#5


得new下Test5类,另外分隔符最好用File.separator。

#6


学会查错,
报错空指针
那你就看看哪一个是空,
debug调试停到这一行,你就会发现fops为空,
然后你肯定在想我不是在构造器中实例化该对象了么?
可以你可以在构造器中加一个输出语句看看是否有输出。。。
只有在实例对象的时候才会调用构造器。。。。

#7


根本就没有实例化兄弟。

#8


在构造函数中初始化,但是你又没有new Test5啊?

#9


你的文件名搞错了吧?把代码File file = new File("D:\\MyDoc\\text.txt")
改为File file = new File("D:\\MyDoc\\test.txt")试试。同时应该在前面做一下文件是否存在的判断处理。

#10


要么创建Test5的对象调用它的属性,要么把初始化工作放到静态代码块中

#11


Test5构造器根本没有运行,你的start是static方法.执行时候根本不用创建Test5实例

#12


 File file = new File("f:\\javasj\\hanruota.txt");// 我放在F盘了
       if (file.exists() && file.isFile()) {
           try {
               BufferedReader input = new BufferedReader(new FileReader(file));
               String text;
               while ((text = input.readLine()) != null)
                   txt.setText(txt.getText() + text + "\n");
           } catch (IOException ioException) {
               System.err.println("File Error!");
           }
       }
这个也许可以帮到你

#13


你的方法是静态的,也就是不需要new出类的实例就调用的,没有调用类的构造方法他怎么能够初始化的么

#14


楼主对Java的一些基本概念还需要再复习下,static关键字在class中的作用。

#15


public Test5() {
        // TODO Auto-generated constructor stub
 
        try {
            fops = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        dops = new DataOutputStream(fops);
         
    }

构造器中的代码没有执行,main函数中的代码改成new Test5(). start();

#16


没有new Test5 怎么实例化 你的 dops 和 fops

#17


楼主你把start()方法的static去了你就可以发现你的程序有什么bug了。

#18


引用 15 楼 a470577391 的回复:
public Test5() {
        // TODO Auto-generated constructor stub
 
        try {
            fops = new FileOutputStream(file);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        dops = new DataOutputStream(fops);
         
    }

构造器中的代码没有执行,main函数中的代码改成new Test5(). start();

++

#19


package c_port_packageDoctor;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test5 {
File file = new File("D:\\MyDoc\\text.txt");
static DataOutputStream dops = null;
static FileOutputStream fops = null;

public Test5() {
// TODO Auto-generated constructor stub

try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);

}

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}

public static void start(){
try {
fops.write(19); ////在运行该方法之前没有new对象,所以fops为空啊,错误提示中不是说了37行空指针异常么,这种错误用不上调试一看就能看明白。还有就是如果你程序出异常那个对象也是出不来的,也可能为空。自己再好好学习下吧,看你学了半年好像基础还是不是很扎实。多做点小案例这才是最有效的学习方式。
dops.writeInt(19);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

#20


引用 12 楼 oLinHao007 的回复:
 File file = new File("f:\\javasj\\hanruota.txt");// 我放在F盘了
       if (file.exists() && file.isFile()) {
           try {
               BufferedReader input = new BufferedReader(new FileReader(file));
               String text;
               while ((text = input.readLine()) != null)
                   txt.setText(txt.getText() + text + "\n");
           } catch (IOException ioException) {
               System.err.println("File Error!");
           }
       }
这个也许可以帮到你

这个怎么没有关闭流呢?

#21


你是想读出还是写入,这个读出流你自己可以关闭的,就是file.flush();file.close();

#22


看到楼主,我放心了!楼主加油 请教高手一个“io流”的“文件写入读出”的问题....

#23


楼主难道是win7系统?

#24


请教高手一个“io流”的“文件写入读出”的问题.... 没有实例化类的过程导致你两个对象没有创建对象。你再去使用这两个对象,自然就是空指针咯。

#25


你根本没有实例化test5!
写的这个程序太乱,按照常规的思路和编写方式来写吧。

#26


 try {  
     // RandomAccessFile bw=new RandomAccessFile("F:\\test.txt","rw");
     // BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream("F:\\test.txt")); 
         // DataOutputStream bw=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));  
          PrintStream bw=new PrintStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt"))); 
       // PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter("F:\\test.txt")));  
        //设置文本内容  
      String str="writer in text";
            byte[] b=(str).getBytes();  
            //写入文件,还可以用其他方法如:write(String str)  
            bw.write(b,0,b.length);  
            bw.close();
           // pw.write(str);
           // pw.close();
            
        } catch (IOException ex) {  
           System.out.println(ex);  
        }  
//这里有几个方法都能实现,注释掉的你也行,自己换着试试吧

#27


不建议看书,建议看看张龙的视频,圣思园的。

#28


没执行你的构造方法啊 

#29


我觉得跟IO流没有关系,感觉还是先看下SE的基础知识吧。

#30


Test5()构造方法写的是初始化流,但是你没有调用啊,它肯定会抛出NullPointException

#31


还是同意#29楼的观点,,感觉跟IO没啥关系,强化一下自己的SE基础吧,基础打牢

#32


请教高手一个“io流”的“文件写入读出”的问题....大家说的都对

#33


面向对象,你操作的哪一行报空指针,你操作的那个对象就是为null。想问楼主是否真的弄懂了面向对象?

#34


从问题的难易程度,看到回答的人的个数,从而推断出大牛的比例

#35


你真的学了半年了,并且知识点都已经掌握了?