当前位置:编程学习 > JAVA >>

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

高手,您好:
    我是一名学习软件工程的学生,现在,我正在“面壁修炼”,Java SE和io流,已经学习了快有半年的时间了,知识点已经掌握了,但是,没有做过太多的工程项目来巩固提高我的对于io流中的知识点的理解..
    最近,我开始通过实验,锻炼我对于Java的io部分的知识的理解与提高.并且锻炼我目前还没有经验的“调试运行时错误的能力”.
    我在D盘中建立了一个文件,如下:
     --------------------编程问答-------------------- 希望高手尤其能够告诉我:
    学习=“调试较复杂多功能多线程im工具”的专业技术的书籍,有哪些?
    并且,网络中有什么资源,能够让我的学习计划,“最快”“最具效果”...?
    谢谢高手的点拨!!
     --------------------编程问答-------------------- 。。。。。。
用debug调试走一下就清楚啦,start()方法里fops和dops都没有实例化。
debug很重要,必须学会!!
看这个视频
http://video.sina.com.cn/v/b/11881813-1281081403.html --------------------编程问答-------------------- fops没有初始化。
fops的初始是在类创建对象的时候,而你是在static 方法里调用,却没有创建任何的Test5的对象,所以没有被初始化过。 --------------------编程问答--------------------  fops和dops都没初始化,要先new一个Test5调用构造方法初始化。 --------------------编程问答-------------------- 得new下Test5类,另外分隔符最好用File.separator。 --------------------编程问答-------------------- 学会查错,
报错空指针
那你就看看哪一个是空,
debug调试停到这一行,你就会发现fops为空,
然后你肯定在想我不是在构造器中实例化该对象了么?
可以你可以在构造器中加一个输出语句看看是否有输出。。。
只有在实例对象的时候才会调用构造器。。。。 --------------------编程问答-------------------- 根本就没有实例化兄弟。 --------------------编程问答-------------------- 在构造函数中初始化,但是你又没有new Test5啊? --------------------编程问答-------------------- 你的文件名搞错了吧?把代码File file = new File("D:\\MyDoc\\text.txt")
改为File file = new File("D:\\MyDoc\\test.txt")试试。同时应该在前面做一下文件是否存在的判断处理。 --------------------编程问答-------------------- 要么创建Test5的对象调用它的属性,要么把初始化工作放到静态代码块中 --------------------编程问答-------------------- Test5构造器根本没有运行,你的start是static方法.执行时候根本不用创建Test5实例 --------------------编程问答--------------------  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!");
           }
       }
这个也许可以帮到你 --------------------编程问答-------------------- 你的方法是静态的,也就是不需要new出类的实例就调用的,没有调用类的构造方法他怎么能够初始化的么 --------------------编程问答-------------------- 楼主对Java的一些基本概念还需要再复习下,static关键字在class中的作用。 --------------------编程问答--------------------
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(); --------------------编程问答-------------------- 没有new Test5 怎么实例化 你的 dops 和 fops --------------------编程问答-------------------- 楼主你把start()方法的static去了你就可以发现你的程序有什么bug了。 --------------------编程问答--------------------
引用 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();

++ --------------------编程问答-------------------- 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();
}
}
}
--------------------编程问答--------------------
引用 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!");
           }
       }
这个也许可以帮到你

这个怎么没有关闭流呢? --------------------编程问答-------------------- 你是想读出还是写入,这个读出流你自己可以关闭的,就是file.flush();file.close(); --------------------编程问答-------------------- 看到楼主,我放心了!楼主加油 --------------------编程问答-------------------- 楼主难道是win7系统? --------------------编程问答--------------------  没有实例化类的过程导致你两个对象没有创建对象。你再去使用这两个对象,自然就是空指针咯。 --------------------编程问答-------------------- 你根本没有实例化test5!
写的这个程序太乱,按照常规的思路和编写方式来写吧。
--------------------编程问答--------------------  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);  
        }  
//这里有几个方法都能实现,注释掉的你也行,自己换着试试吧
--------------------编程问答-------------------- 不建议看书,建议看看张龙的视频,圣思园的。 --------------------编程问答-------------------- 没执行你的构造方法啊  --------------------编程问答-------------------- 我觉得跟IO流没有关系,感觉还是先看下SE的基础知识吧。 --------------------编程问答-------------------- Test5()构造方法写的是初始化流,但是你没有调用啊,它肯定会抛出NullPointException --------------------编程问答-------------------- 还是同意#29楼的观点,,感觉跟IO没啥关系,强化一下自己的SE基础吧,基础打牢 --------------------编程问答-------------------- 大家说的都对 --------------------编程问答-------------------- 面向对象,你操作的哪一行报空指针,你操作的那个对象就是为null。想问楼主是否真的弄懂了面向对象? --------------------编程问答-------------------- 从问题的难易程度,看到回答的人的个数,从而推断出大牛的比例 --------------------编程问答-------------------- 你真的学了半年了,并且知识点都已经掌握了?
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,