Java 的输入输出

在java中,文件或则目录习惯上是用java.io.File对象来表示,但是File类存在一定的缺陷,所以Java7中在NIO2包中带来了更好的替代:java.nio.file.Path接口。


java.nio.file包中还有另一个成员FileSystem类,FileSystem类表示文件系统,是个抽象类,可以调用FileSystem类的getDefault()静态方法来获取当前的文件系统:FileSystem fileSystem = FileSystems.getDefault();
FileSystem中含有其他方法:

  • getSeprator方法返回String的名称分隔符
  • getRootDirectories返回用于迭代根目录的Iterable
  • getPath用来创建Pathpublic abstract Path getPath(String first,string... more)first参数是必须的。
    用例:Path path = FileSystem.getDefault().getPath("/home/user/images");或则Path path =FileSystems.getDefault().getPath("/home","user","images");

不过java.nio.file.Paths类提供了一个快捷方法,可以通过他的静态get方法来创建PathPath path1=Paths.get("C:\temp");

  1. Path中的getNameCount方法返回路径中名称的数量,
  2. 用getName可以检索到每个名称
  3. Path getFileName()返回当前路径的文件名
  4. Path getParent()
  5. Path getRoot()

java.nio.file.Files是个强大的类,提供了处理文件和目录以及读取文件和写入文件的静态方法
1.创建和删除文件和目录
创建文件:

public static Path createFile(Path file,java.nio.file.attribute.FileAttribute<?> ... attrs)

如果不存在父目录,createFile就会抛出一个IOException,如果已经存在由file指定名称的文件、目录或者符号链接,就会抛出一个FileAlreadyExistsException。
创建目录:

public static Path createDirectory(Path directory,java.nio.file.attribute.FileAttribute<?>... attrs)

删除文件、目录或者符号链接

public static void delete(Path path)

如果path不存在,则会抛出NoSuchFileException。删除路径时,必须检测路径是否存在,用deletIfExists

public static void deleteIfExists(Path path)

如果正在删除的目录不是空的,抛出DirectoryNotEmptyException
2.检索目录的对象
用File类的newDirectoryStream方法来检索目录中文件、子目录和符号链接,这个方法将返回一个DirectoryStream来迭代目录中所有的对象。newDirectoryStream方法

public static DirectoryStream<Path> newDirectoryStream(Path path)

此方法返回DirectoryStream使用后必须关闭
用例——输出一个目录中的所有的子目录和文件

Path parent = ...
try (DirectoryStream<Path> children =Files.newDirectoryStream(parent))
{
    for (Path child: children){
        System.out.println(child);
    }
}catch (IOException e){
    e.printStackTrace();
}

3.复制和移动文件

public static Path copy(Path source,Path target

CopyOption是java.nio.file中的一个接口,StandardCopyOption枚举是他的一个实现有三个复制选项

  1. ATOMIC_MOVE,将移动个文件作为原子文件系统操作
  2. COPY_ATTRIBUTES把属性复制给新文件
  3. REPLACE_EXISTING如果文件存在,替换他
public static Path move(Path source ,Path target,CopyOption... options)throws java.io.IOException

4.文件的读取和写入
readAllBytes和readAllLines方法分别用来从二进制和文本文件读取

public static byte[] readAllBytes(Path path)throws java.io.IOException
public static List<String> readAllLines(Path path,java.nio.charset.Charset charset)throws java.io.IOException

用write分别来写入二进制文件和文本文件

public static Path write(Path path,byte[] bytes,
        OpenOption... options)throws java.io.IOException

public static Path write(Path path,java.lang.Iterable<? extends 
        CharSequences>lines,java.nio.charset.Charset charset,
        OpenOption... options)throws java.io.IOException

OpenOption接口提供下面这些值:

  1. APPEND要写入的数据添加到文件末尾
  2. CREATE不存在就创建一个新文件
  3. CREATE_NEW已经存在就创建一个新文件并且抛出异常
  4. DELETE_ON_CLOSE关闭时删除文件
  5. DSYNC文件内容更新时会同步写入
  6. READ打开文件进行读取
  7. SPARSE稀疏文件
  8. SYNC指示文件内容和元素据的更新会同步写入
  9. TRUNCATE_EXISTING如果文件打开进行写入,并且文件已经存在,就把文件的长度缩短到0
  10. WRITE写入
    java.nio.charset是个表示字符集的抽象类,需要指定在字符编码成字节和字节解码成字符是使用的字符集。
    创建Charset最容易的方法是调用静态Charset.forName传递字符集名称。例如
Charset useAscii = Charset.forName("US-ASCII");

输入输出流
根据数据的方向不同,有输入输出流,用输入流从接收端读取,用输出流写入接收端。流用java.io包中的四个抽象类来表示

  • Reader从接收端读取字符的流
  • Write将字符写入接收端的流
  • InputStream从接收端读取二进制数据的流
  • OutStream将二进制数据写入接收端的流

    使用流的典型操作顺序如下:

  • 创建流,生成的对象已经打开,因此不用调用open方法

  • 执行读取或者写入操作
  • 通过调用close方法关闭流,由于目前大多数流类都实现java.lang.AutoCloseable因此可以可以用try-with-resource语句创建流,并且让流自动关闭

    ……写的好累,以后再慢慢补充吧

JAVA的中文输入输出问题。。。

07-01

import java.io.*;rnclass chenjiguanlixitongrnrn static String [][] chengji=new String [4][6];rn static int DC_scroe,JAVA_scroe,English_score;rn static int Total_scroe;rn static String name="";rn public static void anykey_f()rnrn char tChar;rn System.out.println(" 按任意键继续 ... ");rn tryrn tChar=(char)System.in.read();rn rn catch(IOException e)rnrn public static void input()throws UnsupportedEncodingExceptionrn BufferedReader in=new BufferedReader(new InputStreamReader(System.in,"UTF-8"));rn for(int i=0;i<=3;i++)rn System.out.print("-------------------------------\n");rn System.out.println("请输入学生的学号 :");rn System.out.flush();rn trychengji[i][0]=in.readLine();rn catch(IOException e)rn System.out.println("请输入学生的姓名 :");rn System.out.flush();rn trychengji[i][1]=in.readLine();rn catch(IOException e)rn System.out.println("请输入学生的DC成绩 :");rn System.out.flush();rn trychengji[i][2]=in.readLine();rn catch(IOException e)rn System.out.println("请输入学生的JAVA成绩 :");rn System.out.flush();rn trychengji[i][3]=in.readLine();rn catch(IOException e)rn System.out.println("请输入学生的English成绩 :");rn System.out.flush();rn trychengji[i][4]=in.readLine();rn catch(IOException e)rn rn anykey_f();rn rn public static void count()rn for(int i=0;i<=3;i++) //将数据转化成int型,将进行加法计算rn rn DC_scroe=Integer.valueOf(chengji[i][2]).intValue();rn JAVA_scroe=Integer.valueOf(chengji[i][3]).intValue();rn English_score=Integer.valueOf(chengji[i][4]).intValue();rn Total_scroe=DC_scroe+JAVA_scroe+English_score;rn rn chengji[i][5]=String.valueOf(Total_scroe);rn rn for(int i=0;i<=3;i++)rn rn System.out.print("-------------------------\n");rn System.out.println("学生 :"+chengji[i][1]+" 成绩总分为 "+chengji[i][5]);rn rn anykey_f();rn rn public static void bubble_sort()//冒泡排序rnint temp,flag; rn int size=4; rn int [] total_scroe=new int[4]; rn String[] temp2;rn for(int i=0;i <=size-1;i++) rn total_scroe[i]=Integer.valueOf(chengji[i][5]).intValue(); rn rn for(int i=0;itotal_scroe[max])rn max=compare;rn temp=total_scroe[max];rn total_scroe[max]=total_scroe[base];rn total_scroe[base]=temp; rn temp2=chengji[max];rn chengji[max]=chengji[base];rn chengji[base]=temp2; rn rn System.out.println("按总分排序结果 :");rn for(int i=0;i<=3;i++)rn System.out.println(chengji[i][1]+"成绩总分:"+total_scroe[i]);rn rn anykey_f(); rn rnrn public static void query() throws UnsupportedEncodingExceptionrn BufferedReader in=new BufferedReader(new InputStreamReader(System.in,"UTF-8"));rn String st="";rn int k;rn System.out.print("------------------------------\n");rn System.out.print(" 请输入要查询学生的学号 ");rn System.out.flush();rn tryst=in.readLine();catch(IOException e)rn rn for(int i=0;i<=3;i++)rn int flag=0;rn if(chengji[i][0].equals(st))rn flag=1;rn k=i; rn System.out.println("学号 :"+chengji[k][0]);rn System.out.println("姓名 :"+chengji[k][1]);rn System.out.println("DC成绩 :"+chengji[k][2]);rn System.out.println("JAVA成绩 :"+chengji[k][3]);rn System.out.println("English成绩 :"+chengji[k][4]);rn System.out.println("总分 :"+chengji[k][5]);rn rn if(flag!=0)rn break;rn if(i==3)rn System.out.println("无此信息记录,请重新输入..."); rn rn anykey_f();rn rn public static void main (String[] args) throws UnsupportedEncodingException //主函数rn BufferedReader in=new BufferedReader(new InputStreamReader(System.in,"UTF-8"));rn String op="";rn int option=0;rn chenjiguanlixitong obj=new chenjiguanlixitong();rn dorn System.out.println("*********学生成绩管理系统**********");rn System.out.println(" <1>输入 ");rn System.out.println(" <2>总分统计 ");rn System.out.println(" <3>信息查询 ");rn System.out.println(" <4>总分排序(冒泡排序) ");rn System.out.println(" <5>总分排序(选择排序) ");rn System.out.println(" <6>退出 ");rn System.out.println("***********************************");rn op="";rn tryrn op=in.readLine();rn catch(IOException e)rn option=0;rn tryrn option=Integer.valueOf(op).intValue();rn catch(NumberFormatException e)rn System.out.println("");rn switch(option)rn case 1:rn obj.input();//输入函数rn break;rn case 2:rn obj.count();//统计总分函数rn break;rn case 3:rn obj.query();//查询函数rn break;rn case 4:rn obj.bubble_sort(); //冒泡排序函数rn break;rn case 5:rn obj.selection_sort(); //选择排序函数rn break;rn case 6:rn System.exit(0); //退出程序rn rn rn while(true);rnrnrnrnrn中文输出乱码。。。。 该用什么方法转换成UTF-8``` 代码中的那个好像不顶用...rnrn求助```

JAVA文件流输入输出的问题!!

07-27

读取一个模版里面的信息,然后写成HTML文档。rn虽然成功了,但是打开HTML文档的时候中文乱码了!rn[code=Java]import java.io.FileNotFoundException;rnimport java.io.FileReader;rnimport java.io.FileWriter;rnimport java.io.IOException;rnimport java.io.Reader;rnimport java.io.Writer;rnrnpublic class HTML rnrn /**rn * 按照规范格式保存宠物信息到HTML文档。rn * rn * @param argsrn */rn public static void main(String[] args) rn // TODO Auto-generated method stubrn Reader fr = null;rn Writer fw = null;rn StringBuilder sb = new StringBuilder();rn // 1.读取模版文件内容给到SBrn try rn fr = new FileReader("pet.template");rn char[] ch = new char[1024];rn while( fr.read(ch) != -1)rn sb.append(ch);rn rn catch (FileNotFoundException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn catch (IOException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn finally rn try rn if (null != fr) rn fr.close();rn rn catch (IOException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn rn // 2.替换模版中的内容rn String str = sb.toString();rn rn str = str.replace("name", "欧欧");rn str = str.replace("type", "狗狗");rn str = str.replace("master", "李伟");rn System.out.println(str);rn // 3.输出替换后内容到HTML文档rn try rn fw = new FileWriter("pet.html");rn fw.write(str);rn catch (IOException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn finally rn try rn if (null != fw) rn fw.close();rn System.out.println("成功生成HTML文档!");rn rn catch (IOException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn rn rn rnrnrnrn[/code]rnrn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试