3、完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串。static String loadStream(InputStream in) throws IOException {…}
import java.io.*;
public class test {
static String loadStream(InputStream in) throws IOException {
StringBuffer buffer = new StringBuffer();
int n = 1,i=5;
byte[] buf = new byte[n];//缓冲区
while(i-->0)
{
in.read(buf,0,n);
System.out.println(new String(buf));//按字节显示一下
buffer.append(new String(buf));
}
return new String(buffer);
}
public static void main(String[] args) throws IOException {
InputStream in = new BufferedInputStream(System.in);
String test=loadStream(in);
System.out.println("result=: "+test);
}
}
4、编写程序,将一个字符串转为字节数组输入流,将这个流中所有小写字母换成大写字母并写入字节数组输出流中,再将数组输出流转为字符串。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class test {
public static void main(String[] args)
{
String str = "Hello World!"; //源字符串
//字节数组输入流
ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
//字节数组输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//循环读取
int b = -1;
while((b = bais.read()) != -1){
//把小写字母转换成大写字母
System.out.print(" "+(char)b);
if(b >= 97 && b <= 122)
{ //大写字母从 65~90, 小写字母从 97~122
b -= 32;
}
//写回到字节数组输出流中
baos.write(b);
}
System.out.println();
//输出,并把字节数组输出流转换成字符串
String out = baos.toString();
System.out.println(out);
}
}
5、完成下面方法中的代码,方法中的参数为一个文本文件的名称,要求将文件中的内容转为字符串。
static public String loadFile(String filename){…}
import java.io.*;
public class test {
static public String loadFile(String filename) {
File file = new File( filename );
try {
Reader rdr = new FileReader(file);
long sz = file.length();
rdr.read(ch);
rdr.close();
return new String(ch);//变为字符串
} catch(IOException ioe) {
return null;
}
}
public static void main(String[] args) {
String fname = "test.txt";
String test=loadFile(fname);//调用方法
System.out.println(test);
}
}
6、完成下面方法中的代码,将字符串contents中的内容写入文件filename中。
static public boolean saveFile(String filename,String contents){…}
import java.io.*;
public class test {
static public boolean saveFile(String filename, String contents) {
try
{
File file = new File( filename );
if(!file.exists())
{//判断该txt是否存在
file.createNewFile();//不存在就在当前目录下新建一个
}
Writer wtr = new FileWriter( file );
char[] ch = contents.toCharArray();//把字符串转为字符数组
wtr.write(ch);
wtr.close();
return true;
}
catch(IOException ioe)
{
return false;
}
}
public static void main(String[] args) throws IOException
{
String fname = "test.txt";//给定文件名
String contents = "hello world!";//给定写入的字符
if(saveFile(fname,contents))System.out.println("contents is save!");
}
}
7、socket套接字有一个方法getInputStream(),其含义是得到从网络上传过来的数据流。现要求编写一段程序,将接收的数据存入文件。
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args)throws IOException {
Socket socket = new Socket("127.0.0.1",5000);
OutputStream out = socket.getOutputStream();
int i =10;
while(i-->0)
{
out.write("HELLO".getBytes());
out.flush();
}
System.out.println("发送消息完毕!");
out.close();
socket.close();
}
}
public class MultiServer{
public static void main(String[] args)throws IOException {
ServerSocket server = new ServerSocket(4700);
Socket socket = server.accept();
String name = "test.txt";
File file = new File(name);
if(!file.exists()){
file.createNewFile();
System.out.println("文件已新建!");
}
InputStream in = socket.getInputStream();
FileOutputStream fos = new FileOutputStream(name);
byte[] data = new byte[5];
int len = 0;
while((len = in.read(data)) != -1)
{
fos.write(data, 0, len);
fos.write("\r\n".getBytes());
}
System.out.println("上传成功!");
server.close();
fos.close();
}
}
8、编写程序实现文件查找功能。提供两个参数,第一个参数为查找的起始路径,第二个参数为要查找的文件名称。如果找到,则给出文件的完整路径,否则提示文件不存在。
import java.io.File;
public class test
{
String path = null;
public String searchFile(File dir, String fileName)
{
if(dir.isFile())//测试当前dir是否为文件
{
if(dir.getName().equals(fileName))
path = dir.getAbsolutePath();
}
if (dir.isDirectory())//进入if表明dir为一个文件夹
{
File[] files = dir.listFiles();
File f ;
for (int i=0;i<files.length;i++ ){
f = files[i];
path = searchFile(f, fileName);
}
}
return path;
}
public static void main(String[] args) {
File dir = new File("D:/java/");
String fileName = "test.dat";
if (!dir.exists())
{
System.out.println("目录不存在:" + dir);
System.exit(0);
}
String path = new test().searchFile(dir,fileName);
if(path!=null)
System.out.println("文件完整路径:" + path);
else
System.out.println("不存在此文件");
}
}
15.6、利用串行化技术和Socket通信,将一个客户端构造的对象传送到服务器端,并输出该对象的属性值。
User端
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = 1L;
String Name;
String Password;
User()//默认构造函数
{
Name="null";
Password="00000";
}
User(String name,String password)//带参数的构造函数
{
Name=name;
Password=password;
}
void setName(String name) {Name=name;}
void setPassword(String password) {Password=password;}
String getName() {return Name;}
String getPassword() {return Password;}
}
client端
import java.io.*;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws IOException{
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 4700);
} catch (IOException e) {
e.printStackTrace();
}
User u1 = new User();
u1.setName("Tommy");
u1.setPassword("1234567"); //赋值
//把对象串行化为可输出的形式,输入到Socket的输出流里
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(u1);//以串行化方式写入这个对象
System.out.println("successful!");
out.flush();
out.close();//没有close正常退出,服务器端就会被意外中止
}
}
sever端:
import java.io.*;
import java.net.*;
public class MultiTalkServer {
public static void main(String[] args) throws ClassNotFoundException, IOException {
ServerSocket server;
Socket socket = null;
try {
server = new ServerSocket(4700);
socket = server.accept();
//socket.getInputStream()是输入流,要用ObjectInputStream装配为串行化输入流
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
System.out.println("连接成功!");
User u2 = (User) in.readObject();//接受一个被串行化的对象,赋值给u2
System.out.println("Name: "+ u2.getName() + " Password: " + u2.getPassword());
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}