Bridge Stream
InputStreamReader / OutputStreamWriter
- 직접 노드 연결은 불가능하고 노드스트림과 필터스트림의 중간에서 다리 역할을 하는 스트림
- 1바이트로 입력/출력받은 데이터를 2바이트로 만들어서 다른 Reader/Writer에 전달하는 기능
실습
키보드 입력 ==> 도스콘솔에 출력
package io.day03;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
public class StandardInOut {
public static void main(String[] args)
throws IOException
{
InputStream is = System.in;
PrintStream ps = System.out;
InputStreamReader ir = new InputStreamReader(is);
OutputStreamWriter ow = new OutputStreamWriter(ps);
int n = 0;
ow.write("입력하세요=>");
ow.flush();
char []data= new char[100];
while((n=ir.read(data))!=-1) {
ow.write(data,0,n);
ow.flush();
}
ow.close();
ir.close();
ps.close();
is.close();
}
}
BufferdReader/BufferedWriter
- 2byte기반 스트림
- 필터 스트림
버퍼에 모아 읽어들이고 씀
readLine(): 줄 단위로 입력받을 수 있음
실습 : 키보드로 입력받고 콘솔에 출력
package io.day03;
import java.io.*;
public class StandardInOut2 {
public static void main(String[] args)
throws IOException
{
BufferedReader br
=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw
=new BufferedWriter(new OutputStreamWriter(System.out));
// int n =0;
// while((n=br.read())!=-1) {
// bw.write(n);
// bw.flush();
// }
String line="";
bw.write("입력하세요=>");
bw.flush();
while((line=br.readLine())!=null) {
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
System.out.close();
System.in.close();
}
}
실습
파일(StandardInOut.java) 읽어서 파일에(result3.txt) 출력하되
BufferedReader를 이용해서 line 단위로 읽고
BufferedWriter를 이용해서 출력할 때 앞에 줄번호가 붙도록 하세요
package io.day03;
import java.io.*;
public class InOut {
public static void main(String[] args)
throws IOException
{
String file = "src/io/day03/StandardInOut.java";
String file2 = "src/io/day03/result3.txt";
FileReader fr = new FileReader(file);
FileWriter fw = new FileWriter(file2);
//filewriter을 쓰거나 fileinputstream으로 받으면 1byte이기 때문에 inputstreamreader로 바꿔준다.
BufferedReader br
=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
BufferedWriter bw
=new BufferedWriter(new FileWriter(file2));
//true값을 넣으면 개행문자를 만나면 자동으로 flush를 해준다.
PrintWriter pw
=new PrintWriter(System.out,true);
int num = 1;
String line="";
while((line=br.readLine())!=null) {
bw.write(num++ +":"+ line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
fr.close();
fw.close();
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
JavaScript 내장객체
window객체
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>window객체</title>
</head>
<body>
<h1>BOM(Browser Object Model) - 브라우저 내장 객체</h1>
<h2>window객체</h2>
<script>
var openWin=function(){
var url = "ex10for.html";
// var url = "http://www.naver.com";
win = window.open(url, "popup","width=500,height=500,left=500,top=100");
//open(url,target,속성);
}
var closeWin=function(){
if(win!=null){
win.close();
win=null;
}
}
var changeLoc=function(){
//제약 : 동일한 도메인일 경우에만 적용
if(win!=null){
win.moveTo(0,0);
}
}
var changeSize=function(){
if(win!=null){
win.resizeTo(10,10);
}
}
var go=function(){
alert("꽝!!");
}
var show=function(){
//setTimeout(함수, 밀리초);
//지정된 밀리초가 지나면 함수를 호출한다. 딱 한번만
w = window.setTimeout(go,3000);
}
var stop=function(){
window.clear(w);
}
var go2=function(){
alert("메롱~~");
}
var show2=function(){
//setInterval(함수, 밀리초);
//밀리초 뒤에 함수를 호출하되 주기적으로 반복해서 호출한다.
w2 = window.setInterval(go2,3000);
}
var stop2=function(){
//setInterval을 중지시킨다.
if(w2!=null){
window.clearInterval(w2);
}
}
var showClock=function(){
//Date내장객체
//1월은 0을 반환 12월은 11을 반환
var d=new Date();
var str='';
str+=d.getFullYear()+"년"+(d.getMonth()+1)+"월"+d.getDate()+"일"+d.getMinutes()+"분"+d.getSeconds()+"초";
// alert(str);
var obj = document.getElementById('result');
// alert(obj);//DIVelement
obj.innerHTML=str;
}
function goTime(){
//1초 주기로 시간정보를 가져와 id가 result인 곳에 보여주기
w3 = window.setInterval(showClock,1000);
}
var stopClock=function(){
window.clearInterval(w3);
}
</script>
<button onclick="openWin()">팝업창 열기</button>
<button onclick="closeWin()">팝업창 닫기</button>
<button onclick="changeLoc()">팝업창 위치변경</button>
<button onclick="changeSize()">팝업창 크기변경</button>
<hr color='red'>
<button onclick="show()">Click Me</button>
<button onclick="stop()">Click Me2</button>
<hr color='blue'>
<button onclick="show2()">Click Me</button>
<button onclick="stop2()">Click Me2</button>
<hr color='cobalt'>
<button onclick="goTime()">시간 보여주기</button>
<button onclick="stopClock()">시간 멈추기</button>
<div id="result"></div>
</body>
</html>
document 객체
getElementById()
getElementsByTagName()
getElementsByClassName()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>BOM-document 객체</h1>
<script>
//window.document객체 속성
//1 title : 현재 문서가 마지막에 저장된 시간
//2 lastModified : 현재 문서가 마지막에 저장된 시간
//3 bgColor : 현재문서의 배경색
//4 fgColor : 현재문서의 글자색
// window.document.title="현재 문서의 제목";
// document.write("현재 문서의 마지막 저장시간 "+document.lastModified);
// document.bgColor="skyblue";
// document.fgColor="gray";
function changeBt(){
//document의 getElementById('아이디면'): 특정 아이디를 갖는 객체의 참조를 반환
var obj= document.getElementById('btn');
console.log(obj);
//자바스크립트에서는 - => 마이너스이브로
//표기법을 카멜표기법으로 해야한다.
//하이픈 대신에 단어의 첫글자를 대문자로하여 css속성을 사용한다.
obj.style.backgroundColor='red';
obj.style.color='white';
}
function changeH1(){
var h1Arr = document.getElementsByTagName('h1');
//=>반환타입이 Collection
for(var i=0;i<h1Arr.length;i++){
h1Arr[i].style.color='green';
}
}
//h2태그들을 찾아서 배경색을 모두 알아서 주기
//테두리도 2px dashed hotpink
function changeH2(){
var h1Arr = document.getElementsByTagName('h2');
//=>반환타입이 Collection
for(var a in h1Arr){
h1Arr[a].style.color='tomato';
h1Arr[a].style.border="2px dashed hotpink";
}
}
//document의 getElementByClassName('클래스명')
//반환타입 Collection
//class가 myby인 요소들을 찾아서 배경색은 beige
//padding은 5px, 테두리 1px solid gold로 주기
function changeBt2(){
var bta = document.getElementsByClassName("myby");
for(var a in bta){
bta[a].style.padding="5px";
bta[a].style.border="1px solid gold";
bta[a].style.backgroundColor="beige";
}
}
</script>
<h2>h2태그 1</h2>
<h1>h1태그 1</h1>
<h2>h2태그 2</h2>
<h1>h1태그 2</h1>
<button class="myby" id="btn" onclick="changeBt()">버튼색상 변경</button>
<button class="myby" onclick="changeH1()">h1태그 글자색 변경</button>
<button class="myby" onclick="changeH2()">h2태그 글자색 변경</button>
<button class="myby" onclick="changeBt2()">버튼들의 배경색 변경</button>
</body>
</html>