owned this note
owned this note
Published
Linked with GitHub
# 從檔案讀取整數 浮點數
```java=
import java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
while(scan.hasNext()){
System.out.print(scan.nextInt() + " ");
System.out.println(scan.nextDouble());
}
scan.close();
}
}
```
```
data.in檔案的內容如下:
10 3.1
20 6.2
30 4.3
```
## 如何讀取檔案data.in
> System.in 為 [InputStream](https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html)
> 因InputStream建構子為 InputStream() 無法給檔名. 考慮使用它的子類別:
> 子類別有 AudioInputStream, ByteArrayInputStream, [FileInputStream](https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html), FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream
> 連上 [FileInputStream](https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html) 查詢建構子用法有
> FileInputStream(File file)
> FileInputStream(FileDescriptor fdObj)
> FileInputStream(String name)
> 使用FileInputStream(filename)建立InputStream
```java=
import java.util.Scanner;
import java.io.*;
public class Test
{
public static void main(String[] args)
{
try{
FileInputStream fis=new FileInputStream("data.in");
Scanner scan = new Scanner(fis);
while(scan.hasNext()){
System.out.print(scan.nextInt() + " ");
System.out.println(scan.nextDouble());
}
fis.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
```
## 寫檔案
System.out out 是 [PrintStream](https://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html)
PrintStream(String fileName)
PrintStream(String fileName, String csn)
PrintStream(File file)
PrintStream(OutputStream out)
PrintStream(OutputStream out, boolean autoFlush)
PrintStream(OutputStream out, boolean autoFlush, String encoding)
```java=
package dyu.test1101;
import java.io.*; //alt+mouse
import java.util.*;
/**
*
* @author H707
*/
public class MyLib {
//from --> to 這個檔..
public void copy(String from, String to) {
byte[] buf = new byte[1024];
int len;
try{
FileInputStream fis=new FileInputStream(from);
File obj=new File(to);
if(!obj.exists()){
obj.createNewFile();
}
FileOutputStream fos=new FileOutputStream(obj);
while( (len=fis.read(buf)) >0){ //有讀到資料len>0
System.out.println(len);
// buf[0].. buf[0+len]
fos.write(buf, 0, len);
}
fos.close();
fis.close();
}
catch(Exception e){
e.printStackTrace();
}
}
public void read1(String filename){
try{
FileInputStream fis=new FileInputStream(filename);
Scanner scn=new Scanner(fis);
while( scn.hasNext() ){
//scn.nextInt();
//scn.nextDouble();
System.out.println(scn.nextInt());
System.out.println(scn.nextDouble());
}
fis.close();
}
catch(Exception e){
e.printStackTrace();
}
}
public void write1(String filename){
try{
PrintStream ps=new PrintStream(filename);
ps.println("hello");
ps.println(2);
ps.println(3.4);
ps.close();
}
catch(Exception e){
e.printStackTrace();
}
}
//因FileOutputSream建構子可選append..可附加資料到檔尾..
public void write2(String filename){
try{
FileOutputStream fps=new FileOutputStream(filename, true);
PrintStream ps=new PrintStream(fps);
ps.println("hello");
ps.println(2);
ps.println(3.4);
ps.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
```
```java=
package dyu.test1101;
import java.io.*;
/**
*
* @author H707
*/
public class Test1101 {
public static void main(String[] args) {
System.out.println("Hello World!");
File obj=new File("dir1"); //在目前下建一個目錄 dir1\
if(obj.mkdir()){
System.out.println("dir1/ ok");
}
else {
if(obj.exists())
System.out.println("dir1/ was ok");
else System.out.println("dir1/ not ok");
}
File obj1=new File("dir1/abc.txt"); //看起來像檔案..
if(obj1.exists()){
System.out.println("dir1/abc.txt exists");
}
else
System.out.println("dir1/abc.txt doesnt exist");
if(obj1.isFile()) //false
System.out.println("dir1/abc.txt is a file");
if(obj1.isDirectory()) //false..
System.out.println("dir1/abc.txt is a Directory");
if(obj1.canWrite())
System.out.println("dir1/abc.txt can write");
File obj2=new File("dir1/abc"); //相對路徑
if(obj2.canWrite())
System.out.println("dir1/abc/ can write");
System.out.println(obj1.getAbsolutePath());
try{
System.out.println(obj1.getCanonicalPath() );
}catch(Exception e){
e.printStackTrace();
}
File obj3=new File("d:/dir2"); //絕對路徑
obj3.mkdir();
if(obj3.delete())
System.out.println("d:/dir2 delete ok." );
else
System.out.println("d:/dir2 delete is not ok." );
MyLib my=new MyLib();
my.copy("dir1/abc.txt", "dir1/efg.txt");
my.read1("dir1/data.in");
my.write1("a1.txt");//將資料覆寫進a1.txt
my.write2("b1.txt");//將資料寫進b1.txt可附加
}
}
```
```java=
import java.util.Scanner;
import java.io.*;
public class Write1
{
public static void main(String[] args)
{
try{
PrintStream ps=new PrintStream("a.txt");
ps.println("hello world");
ps.println(2);
ps.println(3);
ps.println(3.24);
ps.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
```
缺點 會覆蓋原檔案a.txt, 如何append..
答: 使用PrintStream(OutputStream out) 建構子.
>[OutputStream](https://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html) 的子類別有
ByteArrayOutputStream, [FileOutputStream](https://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html), FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
>FileOutputStream建構子有
[FileOutputStream(String name, boolean append)](https://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html#FileOutputStream(java.lang.String,%20boolean))
FileOutputStream(String name)
使用**FileOutputStream(String name, boolean append)**
<hr>
```java=
import java.util.Scanner;
import java.io.*;
public class Write2
{
public static void main(String[] args)
{
try{
PrintStream ps=new PrintStream(new FileOutputStream("b.txt", true) );
ps.println("hello world");
ps.println(2);
ps.println(3);
ps.println(3.24);
ps.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
```