本程序存在兩處代碼錯誤。所有找出後能夠實現文件上傳功能, java
錯誤1.文件找不到。 錯誤2.圖片上傳成功,訪問Socket時出錯。編程
接收端:數組
package com.itheima.demo1;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10001);
Socket accept = ss.accept();
//網絡中的流,從客戶端讀取數據的
BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
//本地的IO流,把數據寫到本地中,實現永久化存儲
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("ServerDir\\copy.jpg"));
int b;
while((b = bis.read()) !=-1){
bos.write(b);
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));
bw.write("上傳成功");
bw.newLine();
bw.flush();
bos.close();
accept.close();
ss.close();
}
}
發送端:服務器
package com.itheima.demo1;
import java.io.*;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",10001);
//是本地的流,用來讀取本地文件的.
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("ClientDir\\1.jpg"));
//寫到服務器 --- 網絡中的流
OutputStream os = socket.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
byte[] bytes=new byte[1024];
int len;
while((len = bis.read())!=-1){
bos.write(bytes,0,len);//經過網絡寫到服務器中
}
bos.flush();
//給服務器一個結束標記,告訴服務器文件已經傳輸完畢
socket.shutdownOutput();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while((line = br.readLine()) !=null){
System.out.println(line);
}
bis.close();
socket.close();
}
}
出現了系統找不到指定路徑網絡
代碼中寫的是相對於項目下的路徑,而咱們的存放位置在模塊下多線程
更改路徑,加上項目名socket
經過debug發現,每次寫入時候數組爲空,寫入爲空ide
數據沒有讀取到數組中,因此每次寫入的爲空測試
將數組傳入atom
類文件
package com.itheima.demo1;
import java.lang.reflect.Constructor;
public class ReflectDemo1 {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("com.itheima.demo1.Student");
Constructor constructor = clazz.getDeclaredConstructor(String.class);
Student wang = (Student) constructor.newInstance("老王");
System.out.println(wang);
}
}
javabean類
package com.itheima.demo1;
public class Student {
private String name;
private int age;
public Student() {
}
private Student(String name) {
}
public Student(String name, int age) {
}
本題目有兩處錯誤。目前運行會報錯。 錯誤1.運行直接會報出的異常。 錯誤2.運行結果是Student{name='null', age=0}。要求打印結果是: Student{name='老王', age=0}
緣由該構造是私有的,咱們使用此構造須要修改Accessible
修改臨時檢測
私有帶參構造沒有進行賦值操做
進行賦值
類文件
package com.itheima.demo2;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectDemo2 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
Class clazz = Class.forName("com.itheima.demo2.Student");
Method method = clazz.getMethod("function4", String.class);
Student student = (Student) clazz.newInstance();
Object result = method.invoke("hello");
System.out.println(result);
}
}
javabean
package com.itheima.demo2;
public class Student {
private void show() {
System.out.println("私有的show方法,無參無返回值");
}
public void function1() {
System.out.println("function1方法,無參無返回值");
}
public void function2(String name) {
System.out.println("function2方法,有參無返回值,參數爲" + name);
}
public String function3() {
return "function3";
}
public String function4(String name) {
return name;
}
}
本題目有1處錯誤。目前運行會報錯:IllegalArgumentException。要求打印結果是: hello
invoke方法傳參錯誤
修改參數
dtd代碼
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
xml代碼
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<body>Don't forget the meeting!</body>
<heading>Reminder</heading>
</note>
標籤位置和限制文檔位置不符,致使報出此錯誤
修改位置
xml文件
<?xml version="1.0"?>
<note
xmlns="http://www.itheima.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itheima.com.cn note.xsd">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>aaa</body>
</note>
xsd文件
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itheima.com.cn"
xmlns="http://www.itheima.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="from" type="xs:string"/>
<xs:element name="to" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
限制文檔順序和類型引起異常
修改位置,修改數據類型
線程任務類
package com.itheima.demo1;
public class MyThread extends Thread {
測試類:
package com.itheima.demo1;
public class MyThreadDemo {
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.setName("1號線程");
mt.start();
}
}
運行MyThreadDemo中的主方法,觀察其運行結果後修改代碼,要求運行結果是:
1號線程線程進來執行了
0
1
2
3
4
run是調用,start纔是開啓線程
線程任務類
package com.itheima.demo2;
public class MyRunnable implements Runnable {
private int count = 10;
測試類
package com.itheima.demo2;
public class MyRunnableDemo {
public static void main(String[] args) {
MyRunnable my1 = new MyRunnable();
MyRunnable my2 = new MyRunnable();
Thread t1 = new Thread(my1,"A窗口");
Thread t2 = new Thread(my2,"B窗口");
t1.start();
t2.start();
}
}
運行MyRunnableDemo中的主方法,觀察其運行結果後修改代碼,要求運行結果是:
A窗口售出:10號票
A窗口售出:9號票
A窗口售出:8號票
A窗口售出:7號票
A窗口售出:6號票
A窗口售出:5號票
A窗口售出:4號票
A窗口售出:3號票
A窗口售出:2號票
A窗口售出:1號票
注意:出現哪一個窗口不重要,重要的是隻能有10張被售出。
出現重複票
數據未靜態
將數據進行靜態
沒有結束語句
加一個判斷票數爲0,結束程序
最終效果