Store Output Stream into String
Hello
I want to store my out put stream in to string so that i can use it latter.
out.println("Nilesh patel");
out.println("[email protected]");
out.println("Ahmedabad");
it is "Nilesh patel [email protected] Ahmedabad" but i want to store into string like
String tmp = out.toString();
it is return the hash code of out object how can i store this value in String variable?
To me, the most elegant way to do this would be with a Servlet Filter.
You use a ResponseWrapper to create a "BufferedResponse" object, and pass that down to the next JSP/Servlet. Basically you have to override methods such as getWriter(), getOutputStream()...
The JSP/servlet works as normal, but any calls to out.println() can be under your control.
This simple class might help:
public class RedirectingServletResponse extends HttpServletResponseWrapper {
RedirectServletStream out;
* @param arg0
public RedirectingServletResponse(HttpServletResponse response, OutputStream out) {
super(response);
this.out = new RedirectServletStream(out);
/* (non-Javadoc)
* @see javax.servlet.ServletResponse#flushBuffer()
public void flushBuffer() throws IOException {
out.flush();
/* (non-Javadoc)
* @see javax.servlet.ServletResponse#getOutputStream()
public ServletOutputStream getOutputStream() throws IOException {
return out;
/* (non-Javadoc)
* @see javax.servlet.ServletResponse#getWriter()
public PrintWriter getWriter() throws IOException {
return new PrintWriter(out);
private static class RedirectServletStream extends ServletOutputStream {
OutputStream out;
RedirectServletStream(OutputStream out) {
this.out = out;
public void write(int param) throws java.io.IOException {
out.write(param);
}You then use it something like this:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
// create an output stream - to file, to memory...
ByteArrayOutputStream out = new ByteArrayOutputStream();
// create the "dummy" response object
RedirectingServletResponse dummyResponse = new RedirectingServletResponse(response, out);
// pass it on to the next level:
chain.doFilter(request, dummyResponse);
// at this point the OutputStream has had the response written into it.
byte[] result = out.getByteArray();
// now you can do with it what you will.
}There is probably a better way - providing response that will write any output to two output streams - the original and an alternative one (file) would be a good option.
Hope this helps,
evnafets
Similar Messages
-
Store file streams into dicom object in oracle 11g (BLOB construct)
The datastream is transfered from network and stored into oracle DB as a blob , then I use the Dicom construct to build the dicom object . The problem is , before I have the blob in the DB , I have to create an empty Blob object ,I use this this empty blob and do the datastream store .
Does somebody have the idea ,how to directly store the datastream into the DB BLOB ,or can I put this BLOB as the variable in JAVA .
my program like this :
stmt.executeUpdate("insert into blob_tbl(id,my_blob) values('" + in + "',empty_blob())");
ResultSet rs = stmt.executeQuery("select my_blob from blob_tbl where id='" + in + "' for update" );
if(rs.next())
Blob blob = rs.getBlob(1);
OutputStream out = ((oracle.sql.BLOB)blob).getBinaryOutputStream();
byte[] b = new byte[((oracle.sql.BLOB)blob).getBufferSize()];
InputStream fin = inStream;
int len = 0;
while( (len = fin.read(b)) != -1)
out.write(b,0,len);
fin.close();
out.close();
conn.commit();The datastream is transfered from network and stored into oracle DB as a blob , then I use the Dicom construct to build the dicom object . The problem is , before I have the blob in the DB , I have to create an empty Blob object ,I use this this empty blob and do the datastream store .
Does somebody have the idea ,how to directly store the datastream into the DB BLOB ,or can I put this BLOB as the variable in JAVA .
my program like this :
stmt.executeUpdate("insert into blob_tbl(id,my_blob) values('" + in + "',empty_blob())");
ResultSet rs = stmt.executeQuery("select my_blob from blob_tbl where id='" + in + "' for update" );
if(rs.next())
Blob blob = rs.getBlob(1);
OutputStream out = ((oracle.sql.BLOB)blob).getBinaryOutputStream();
byte[] b = new byte[((oracle.sql.BLOB)blob).getBufferSize()];
InputStream fin = inStream;
int len = 0;
while( (len = fin.read(b)) != -1)
out.write(b,0,len);
fin.close();
out.close();
conn.commit(); -
How can i Store rtmp streaming into local File System?
I use socket and netstream.appendBytes to receive and play flv frames.
now I got the BytesArray,but how can i store them into local File?
FlashPlayer can't use Air File APIs.This is by design. Content on the Internet does not have access to your local filesystem. We offer Local Shared Objects (LSOs) for storing small amounts of information, but this would not be suitable for scraping a video feed to disk.
-
How to store output of SQ01 into internal table.
Hello Experts
How to store output of SQ01 into internal table.
Thanks,
UmeshYou can't store the sq01 output into internal table.
Once you create the query it will generate the abap program, in that program you can see the contents.
Regards
Sasi -
From a PC, how do I store a photo into Photo Stream so that I can access it on iPad?
From a PC, how do I store a photo into Photo Stream so that I can access it on iPad? Like, a Word document can be dropped into iCloud from my PC and it will appear when I open iCloud from my iPad.
Text copied from here.
http://support.apple.com/kb/PH2606?viewlocale=en_US
From your Windows desktop
From your Windows desktop, drag any photo to the Photo Stream Uploads folder you chose in the iCloud Control Panel.
Note: Photos in Photo Stream appear in the order they were originally taken, not in the order they were added to Photo Stream. If you manually add photos, they appear throughout Photo Stream in the appropriate date order.
For a list of file types that can be added to Photo Stream, go to the Apple Support article Photo Stream FAQ and see “What photo formats does Photo Stream support.” -
Convert Inputstructure into String and store into DB2
Hello All
My requirement is I want to convert total input structure into string then stored into database single field as clob. Can anyone suggest me how will i retive input structor, is there any user defined function will i write or is there any inbuilt functionality in SAP PI. Plese suggest me
Thanks&Regards,
VenkatKHi Swarup / Shamly
My input structure is nearly 60 fields. Sample Structure
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<create xmlns="urn:MySoapServices">
<PurchaseOrder>
<BuyerDetails>
<Organization>University of Washington</Organization>
<Authorized_Person>
<FisrtName>Cease</FisrtName>
<LastName>Wayne</LastName>
</Authorized_Person>
<Street>Savery Hall</Street>
<City>Seattle</City>
<State>Wa</State>
<Zip>98195</Zip>
<Contact_Numbers>
<Phone>888-846-6638</Phone>
<Fax>212-629-1158</Fax>
</Contact_Numbers>
<Email>hidekiu.washington.edu</Email>
</BuyerDetails>
<SupplierDetails>
<Organization>Thomas Industrial Network</Organization>
<Authorized_Person>
<FisrtName>Cease</FisrtName>
<LastName>Wayne</LastName>
</Authorized_Person>
<Street>5 Penn Plaza, 10th Floor</Street>
<City>New York</City>
<State>NY</State>
<Zip> 10001</Zip>
<Contact_Numbers>
<Phone>888-846-6638</Phone>
<Fax>212-629-1158</Fax>
</Contact_Numbers>
</SupplierDetails>
<PurchaseOrderInformation>
<Order_Number>4556</Order_Number>
<Order_Delivery_Date>10-10-2006</Order_Delivery_Date>
<PO_Type>Finished</PO_Type>
<status>PO sent</status>
</PurchaseOrderInformation>
<Address>
<Shipping_Address>
<Organisation>University of Washington</Organisation>
<Authorized_Person>
<FisrtName>Cease</FisrtName>
<LastName>Wayne</LastName>
</Authorized_Person>
<Street>Savery Hall</Street>
<City>Seattle</City>
<State>Wa</State>
<Zip>98195</Zip>
<Email>hidekiu.washington.edu</Email>
</Shipping_Address>
<Billing_Address>
<Organisation>University of Washington</Organisation>
<Authorized_Person>
<FisrtName>Cease</FisrtName>
<LastName>Wayne</LastName>
</Authorized_Person>
<Street>Savery Hall</Street>
<City>Seattle</City>
<State>Wa</State>
<Zip>98195</Zip>
<Email>hideki</Email>
</Billing_Address>
</Address>
<Payment_Terms>
<Purchase_Order>
<PO_Number>456</PO_Number>
<Payment_Type>Bank</Payment_Type>
<Payment_Type_PO>
<Bank>
<BankName>Citibank</BankName>
<AccountNumber>654987456</AccountNumber>
<BranchCode>564</BranchCode>
</Bank>
<Credit_Card>
<Payment_Type_CC>VISA</Payment_Type_CC>
<CC_Number>1234 4567 7890 0123</CC_Number>
<CC_Expire_Date>10-12-2012</CC_Expire_Date>
</Credit_Card>
</Payment_Type_PO>
</Purchase_Order>
<Currency>USD</Currency>
</Payment_Terms>
<Purchase_Items>
<Item>
<Part_Name>6 foot wide 5 foot high cabinet</Part_Name>
<Quantity>9</Quantity>
<Description>Cabinets of systems</Description>
</Item>
<Item>
<Part_Name>6 foot wide shelves</Part_Name>
<Quantity>6</Quantity>
<Description>Shelves for books</Description>
</Item>
</Purchase_Items>
</PurchaseOrder>
</create>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
I need to store whole XML structure (Including XML version) into Database single field as a clob. not field values. Please help me out from this issue. -
How to store double quote into a string?
How to store double quote into a string?
What I mean is:
suppose I want to save the following sentence into string s:
What is the syntax?
Thanks a lot!String s = "<a href=\"../jsp/Logout.jsp\">"
check out this page
http://java.sun.com/docs/books/tutorial/index.html
Hope this helps -
How to create a file and store its contents into another file?
Hi,
I'm having some trouble trying to create a code where I have to to create a file and store its contents into another file?
I read the API, but I'm not certain how this file thing works.
Here's my code so far:
public static void main(String[] args) throws Exception
File file = new File("tasks.txt");
if (file.exists())
System.out.println("File already exists");
System.exit(0);
Scanner scan = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
//Scans the input line by line
scan.useDelimiter("\\n");
//Scans the input by tabs
scan2.useDelimiter("\\t");
PrintWriter outputs = new PrintWriter("newtasks.txt");
outputs.print("ok");
outputs.println(3);
outputs.close();
}I managed to change my text into uppercase, but how do I store the uppercase content into another file.
-So this is what I did so far, I took a text file and modified its strings to uppercase.
-Now I need to put those modified strings into another text file, is there a way where I can do that with my current code?
-I already tried printwriter, but it doesn't seem to work
public static void main(String[] args)throws IOException
//Task[] oneHundredTasks = new Task[100];
String uppercase;
String combine;
Scanner scan = null;
FileInputStream in = null;
FileOutputStream out = null;
PrintWriter output = null;
try
scan = new Scanner(new BufferedReader(new FileReader("tasks.txt")));
scan.useDelimiter("\\n");
scan.useDelimiter("\\t");
while (scan.hasNext())
if(!scan.hasNext())
scan.next();
combine = scan.next();
uppercase = combine.toUpperCase();
System.out.println(uppercase);
finally
if (scan != null)
scan.close();
//The program will try the input and output files
try
in = new FileInputStream("tasks.txt");
out = new FileOutputStream("newtasks.txt");
int c;
//The number "-1" is used to indicate that it has reached the end of the stream.
while ((c = in.read()) != -1)
out.write(c);
finally
if (in != null)
in.close();
if (out != null)
out.close();
} -
MultiThreading with Input and Output Streams
Hi,
I have a problem and I think it's because I'm not coding correctly. Please help me if you can understand what I'm doing wrong.
I have a server that spawns a separate thread to go off and collect data from a serial port. It also waits to accept connections from any client and if a connection is made it will send that data to the clients connected.
There is data constantly coming in through the serial port. It is output through a DataOutputStream so when the thread is created in the server, I pipe it into a DataInputStream. I do does because I want the server to then read in the data from the inputstream and then send it out to all my clients.
So far, the way I have it set up seems to do this. But my problem occurs when I try to close a client connection. Instead of removing the socket connection it gives me an error that it can't send data to the client, but it shouldn't be sending data to the client because I just closed it. I realize this is probably because I'm still constantly receiving data from my inputstream and the connection was closed so it can't send that data to the client. I know I need to either close the stream or close my socket but I don't know where this needs to be done. I'm stuck on the correct way to fix this.
My second problem is the initial connection made to receive data from the inputstream. This is probably because I'm not very familiar with how input/output streams work. But instead of just sending the client the current data being received in real time, it'll send all the data that's buffered in the inputstream. I don't want all the data that's been collecting to go to that first client. I only want the recent data that is coming through while the client is connected. Does this make sense? Because after I make a second client connection I don't have this problem because the InputStream is no longer buffered up. Should I be using something else besides the DataInputStream?
I feel like I'm going about this the wrong way. Please advise. I'm shy about showing the code but I've included the bulk of it here in hopes that someone will see what I'm doing wrong. The only part that's left out is the thread that reads from the serial port. I don't seem to have any problems with that thread.
Thanks,
kim
===
import java.io.*;
import java.net.*;
import javax.comm.*;
import java.util.*;
// DataServer waits for a client connection
class DataServer
static final int PORT = 7;
// The ServerSocket to use for accepting new connections
private ServerSocket ss;
// A mapping from sockets to DataOutputStreams. This will
// help us avoid from having to create a DataOutputStream each time
// we want to write to a stream.
private Hashtable outputStreams = new Hashtable();
// The inputstream that will receive serial port data through a
// piped inputstream
public DataInputStream datalogger;
// Constructor and while-accept loop all in one.
public DataServer() throws IOException
try {
// Creating pipe to convert the outputstream from the
// RS232 Thread to an inputstream for the server to read
PipedOutputStream pout = new PipedOutputStream();
PipedInputStream pin = new PipedInputStream(pout);
// The inputstream that will receive data from the RS232Thread
datalogger = new DataInputStream(pin);
// Spawn the thread that will read data through from
// the TINI serial port
new RS232Thread( pout ).start();
// Begin listening for connections and send data
listen();
} catch (IOException ioe) {
System.out.println("Error >> DataServer::DataServer()");
System.out.println(ioe.getMessage());
ioe.printStackTrace();
} finally {
try {
System.out.println( "Closing >> DataServer::DataServer()" );
datalogger.close();
} catch (IOException i ) {
System.out.println( "Error2 >> DataServer::DataServer()" );
System.out.println(i); }
private void listen() throws IOException
// Create the ServerSocket
ss = new ServerSocket( PORT );
// Inform that the server is ready to go
System.out.println( "Listening on " + ss );
// Keep accepting connections forever
while (true) {
// Grab the next incoming connection
Socket s = ss.accept();
// Inform that connection is made
System.out.println( "Connection from " + s );
// Create a DataOutputStream for writing data to the
// other side
DataOutputStream dout = new DataOutputStream( s.getOutputStream() );
// Save this stream so we don't need to make it again
outputStreams.put( s, dout );
// Create a new thread for this connection, and then foret
// about it
new ServerThread( this, s );
// Get an enumeration of all the OutputStreams, one for each client
// connected to the server
Enumeration getOutputStreams() {
return outputStreams.elements();
// Send a message to all clients (utility routine)
void sendToAll( byte[] b ) {
// synchronize on this because another thread might be
// calling removeConnection() and this would screw things up
// while it walks through the list
synchronized( outputStreams ) {
// For each client...
for (Enumeration e = getOutputStreams(); e.hasMoreElements();) {
// ... get the output stream ...
DataOutputStream dout = (DataOutputStream)e.nextElement();
// ... and send the message
try {
dout.write( b );
} catch(IOException ie) {
System.out.println( "Error >> ServerThread::sendToAll()" );
System.out.println( ie );
// remove a socket, and it's corresponding output stream, from the
// list. This is usually called by a connection thread that has
// discovered that the connection to the client is dead.
void removeConnection( Socket s ) {
// Synchronize so it doesn't mess up sendToAll() while it walks
// down the list of all output streams
synchronized( outputStreams ) {
// Inform about removal
System.out.println( "Removing connection to " + s );
// Remove if from our hastable/list
outputStreams.remove( s );
// Make sure it's closed
try {
s.close();
} catch( IOException ie ) {
System.out.println( "Error closing " + s );
ie.printStackTrace();
// main - Opens a server socket and spins off a new thread each time
// a new client connection is accepted on this socket.
public static void main(String[] args) throws Exception
System.out.println("Starting DataServer version 1.0 ...");
try
new DataServer();
catch (IOException ioe)
System.out.println( "Error >> DataServer::main()" );
System.out.println(ioe.getMessage());
ioe.printStackTrace();
class ServerThread extends Thread
//The Server that spawned this thread
private DataServer server;
// The Socket connected to the client
private Socket socket;
//Constructor
public ServerThread( DataServer server, Socket socket )
// save the parameters
this.server = server;
this.socket = socket;
// Start up the thread
start();
// This runs in a separate thread when start() is called in the
// constructor
public void run() {
try {
// The inputstream receiving data from the global inputstream
// that is piped to the RS232 Thread
// ???? is this where i'm messing up ???
DataInputStream in = new DataInputStream( server.datalogger );
int num = 0;
byte[] d = new byte[1];
// read from the inputstream over and over, forever ...
while( ( num = in.read(d) ) > 0 ) {
// ... and have the server send it to all clients
server.sendToAll( d );
} catch (IOException ioe) {
System.out.println( "Error >> ServerThread::run()" );
System.out.println(ioe.getMessage());
ioe.printStackTrace();
} finally {
// The connection is closed for one reason or another,
// so have the server dealing with it
System.out.println( "Closing" );
server.removeConnection( socket );A couple of things to note...
First, you are looping infinitely in your server's constructor. Since the constructor is never completing, your server object is never completely constructed - this may cause indeterminate behaviour when you pass a reference to the server to another thread.
Second, I would recommend fixing your issues by modifying your design somewhat. The design I would recommend (read: The design I would use) is:
A server object, with a public listen method. The constructor spawns a thread to constantly read from the serial port and forward the data read back to the server, via a multicast (sendToAll) method.
The listen method sets up a server socket to accept connections, and in a loop opens client sockets and stores them in a set.
The multicast method iterates through the list of open client sockets, and for each in turn confirms that it is still open. If open, send the data down the socket's output stream; if closed, remove the socket from the set.
Note that this design includes only two threads - the main thread listens for and accepts new socket connections, while the extra thread collects data from the serial port, multicasts it to all of the open sockets, and removes all of the closed sockets. If you require to perform any other communication with the sockets, it may be necessary to create a thread for those sockets, to facilitate reading from their input streams, but in the given design, this is not necessary.
I hope this helps,
-Troy -
How can I put an output stream (HTML) from a remote process on my JSF page
Hello,
I've a question if someone could help.
I have a jsf application that need to execute some remote stuff on a different process (it is a SAS application). This remote process produces in output an html table that I want to display in my jsf page.
So I use a socket SAS class for setting up a server socket in a separate thread. The primary use of this class is to setup a socket listener, submit a command to a remote process (such as SAS) to generate a data stream (such as HTML or graphics) back to the listening socket, and then write the contents of the stream back to the servlet stream.
Now the problem is that I loose my jsf page at all. I need a suggestion if some one would help, to understand how can I use this html datastream without writing on my Servlet output stream.
Thank you in advance
A.
Just if you want to look at the details .....
// Create the remote model
com.sas.sasserver.submit.SubmitInterface si =
(com.sas.sasserver.submit.SubmitInterface)
rocf.newInstance(com.sas.sasserver.submit.SubmitInterface.class, connection);
// Create a work dataset
String stmt = "data work.foo;input field1 $ field2 $;cards;\na b\nc d\n;run;";
si.setProgramText(stmt);
// Setup our socket listener and get the port that it is bound to
com.sas.servlet.util.SocketListener socket =
new com.sas.servlet.util.SocketListener();
int port = socket.setup();
socket.start();
// Get the localhost name
String localhost = (java.net.InetAddress.getLocalHost()).getHostAddress();
stmt = "filename sock SOCKET '" + localhost + ":" + port + "';";
si.setProgramText(stmt);
// Setup the ods options
stmt = "ods html body=sock style=brick;";
si.setProgramText(stmt);
// Print the dataset
stmt = "proc print data=work.foo;run;";
si.setProgramText(stmt);
// Close
stmt = "ods html close;run;";
si.setProgramText(stmt);
// get my output stream
context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
ServletOutputStream out = response.getOutputStream();
// Write the data from the socket to the response
socket.write(out);
// Close the socket listener
socket.close();The system exec function is on the Communication palette. Its for executing system commands. On my Win2K system, the help for FTP is:
"Ftp
Transfers files to and from a computer running an FTP server service (sometimes called a daemon). Ftp can be used interactively. Click ftp commands in the Related Topics list for a description of available ftp subcommands. This command is available only if the TCP/IP protocol has been installed. Ftp is a service, that, once started, creates a sub-environment in which you can use ftp commands, and from which you can return to the Windows 2000 command prompt by typing the quit subcommand. When the ftp sub-environment is running, it is indicated by the ftp command prompt.
ftp [-v] [-n] [-i] [-d] [-g]
[-s:filename] [-a] [-w:windowsize] [computer]
Parameters
-v
Suppresses display of remote server responses.
-n
Suppresses autologin upon initial connection.
-i
Turns off interactive prompting during multiple file transfers.
-d
Enables debugging, displaying all ftp commands passed between the client and server.
-g
Disables file name globbing, which permits the use of wildcard characters (* and ?) in local file and path names. (See the glob command in the online Command Reference.)
-s:filename
Specifies a text file containing ftp commands; the commands automatically run after ftp starts. No spaces are allowed in this parameter. Use this switch instead of redirection (>).
-a
Use any local interface when binding data connection.
-w:windowsize
Overrides the default transfer buffer size of 4096.
computer
Specifies the computer name or IP address of the remote computer to connect to. The computer, if specified, must be the last paramete
r on the line."
I use tftp all of the time to transfer files in a similar manner. Test the transfer from the Windows command line and copy it into a VI. Pass the command line to system exec and wait until it's done. -
(Urgent help needed) how to read txt file and store the data into 2D-array?
Hi, I have a GUI which allow to choose file from the file chooser, and when "Read file" button is pressed, I want to show the array data into the textarea.
The sample data is like this followed:
-0.0007 -0.0061 0.0006
-0.0002 0.0203 0.0066
0 0.2317 0.008
0.0017 0.5957 0.0008
0.0024 1.071 0.0029
0.0439 1.4873 -0.0003
I want my program to scan through and store these data into 2D array.
However for some reason, my source code issues errors, and I don't know what's wrong with it, seems to have a problem in StringTokenizer though. Can anybody help me?
Thanks in advance.
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.StringTokenizer;
public class FileReduction1 extends JFrame implements ActionListener{
// GUI features
private BufferedReader fileInput;
private JTextArea textArea;
private JButton openButton, readButton,processButton,saveButton;
private JTextField textfield;
private JPanel pnlfile;
private JPanel buttonpnl;
private JPanel buttonbar;
// Other fields
private File fileName;
private String[][] data;
private int numLines;
public FileReduction1(String s) {
super(s);
// Content pane
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
// Open button Panel
pnlfile=new JPanel(new BorderLayout());
textfield=new JTextField();
openButton = new JButton("Open File");
openButton.addActionListener(this);
pnlfile.add(openButton,BorderLayout.WEST);
pnlfile.add(textfield,BorderLayout.CENTER);
readButton = new JButton("Read File");
readButton.addActionListener(this);
readButton.setEnabled(false);
pnlfile.add(readButton,BorderLayout.EAST);
cp.add(pnlfile, BorderLayout.NORTH);
// Text area
textArea = new JTextArea(10, 100);
cp.add(new JScrollPane(textArea),BorderLayout.CENTER);
processButton = new JButton("Process");
//processButton.addActionListener(this);
saveButton=new JButton("Save into");
//saveButton.addActionListener(this);
buttonbar=new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonpnl=new JPanel(new GridLayout(1,0));
buttonpnl.add(processButton);
buttonpnl.add(saveButton);
buttonbar.add(buttonpnl);
cp.add(buttonbar,BorderLayout.SOUTH);
/* ACTION PERFORMED */
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Open File")) getFileName();
if (event.getActionCommand().equals("Read File")) readFile();
/* OPEN THE FILE */
private void getFileName() {
// Display file dialog so user can select file to open
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showOpenDialog(this);
// If cancel button selected return
if (result == JFileChooser.CANCEL_OPTION) return;
if (result == JFileChooser.APPROVE_OPTION)
fileName = fileChooser.getSelectedFile();
textfield.setText(fileName.getName());
if (checkFileName()) {
openButton.setEnabled(false);
readButton.setEnabled(true);
// Obtain selected file
/* READ FILE */
private void readFile() {
// Disable read button
readButton.setEnabled(false);
// Dimension data structure
getNumberOfLines();
data = new String[numLines][];
// Read file
readTheFile();
// Output to text area
textArea.setText(data[0][0] + "\n");
for(int index=0;index < data.length;index++)
for(int j=1;j<data[index].length;j++)
textArea.append(data[index][j] + "\n");
// Rnable open button
openButton.setEnabled(true);
/* GET NUMBER OF LINES */
/* Get number of lines in file and prepare data structure. */
private void getNumberOfLines() {
int counter = 0;
// Open the file
openFile();
// Loop through file incrementing counter
try {
String line = fileInput.readLine();
while (line != null) {
counter++;
System.out.println("(" + counter + ") " + line);
line = fileInput.readLine();
numLines = counter;
closeFile();
catch(IOException ioException) {
JOptionPane.showMessageDialog(this,"Error reading File",
"Error 5: ",JOptionPane.ERROR_MESSAGE);
closeFile();
System.exit(1);
/* READ FILE */
private void readTheFile() {
// Open the file
int row=0;
int col=0;
openFile();
System.out.println("Read the file");
// Loop through file incrementing counter
try {
String line = fileInput.readLine();
while (line != null)
StringTokenizer st=new StringTokenizer(line);
while(st.hasMoreTokens())
data[row][col]=st.nextToken();
System.out.println(data[row][col]);
col++;
row++;
closeFile();
catch(IOException ioException) {
JOptionPane.showMessageDialog(this,"Error reading File",
"Error 5: ",JOptionPane.ERROR_MESSAGE);
closeFile();
System.exit(1);
/* CHECK FILE NAME */
/* Return flase if selected file is a directory, access is denied or is
not a file name. */
private boolean checkFileName() {
if (fileName.exists()) {
if (fileName.canRead()) {
if (fileName.isFile()) return(true);
else JOptionPane.showMessageDialog(null,
"ERROR 3: File is a directory");
else JOptionPane.showMessageDialog(null,
"ERROR 2: Access denied");
else JOptionPane.showMessageDialog(null,
"ERROR 1: No such file!");
// Return
return(false);
/* FILE HANDLING UTILITIES */
/* OPEN FILE */
private void openFile() {
try {
// Open file
FileReader file = new FileReader(fileName);
fileInput = new BufferedReader(file);
catch(IOException ioException) {
JOptionPane.showMessageDialog(this,"Error Opening File",
"Error 4: ",JOptionPane.ERROR_MESSAGE);
System.out.println("File opened");
/* CLOSE FILE */
private void closeFile() {
if (fileInput != null) {
try {
fileInput.close();
catch (IOException ioException) {
JOptionPane.showMessageDialog(this,"Error Opening File",
"Error 4: ",JOptionPane.ERROR_MESSAGE);
System.out.println("File closed");
/* MAIN METHOD */
/* MAIN METHOD */
public static void main(String[] args) throws IOException {
// Create instance of class FileChooser
FileReduction1 newFile = new FileReduction1("File Reduction Program");
// Make window vissible
newFile.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
newFile.setSize(500,400);
newFile.setVisible(true);
Java.lang.NullpointException
at FileReductoin1.readTheFile <FileReduction1.java :172>
at FileReductoin1.readFile <FileReduction1.java :110>
at FileReductoin1.actionPerformed <FileReduction1.java :71>
.1) Next time use the CODE tags. this is way too much unreadable crap.
2) The problem is your String[][] data.... the only place I see you do anything approching initializing it is
data = new String[numLines][];I think you want to do this..
data = new String[numLines][3];anyway that's why it's blowing up on the line
data[row][col]=st.nextToken(); -
How to read unix standrad pipe output stream
I want to write some code that will read data from a standard solaris pipe output stream. Please help.
For example
I cat a file in a unix shell
cat /etc/hosts
The output of this file can be piped to another program and I want to write a piece of code that reads that piped data and puts it into a textArea.
ThanksHere ya go bro.................
This just checks if IO is coming in and if so prints it to the term, but
you get the idea.
There might be an better way but...........
import java.io.*;
class xxx
public static void main(String args[])
byte b[] = new byte[256];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
if(System.in.available() > 0) {
System.in.read(b);
baos.write(b,0,256);
System.out.println(baos.toString());
else
System.out.println("No pipe being layed");
catch(Throwable t){} -
Is there a general purpose output stream class like in java?
Hi, I sometimes create tools (abap OO classes) which output characters, that I would like to store in any media (frontend file, server file, string variable, ftp, clipboard, etc.) This is easily done in java via the output stream classes.
Do you know if this kind of class exists? I saw some classes like that, but they are specialized, for example XML, SOAP. I look for non-specialized classes like in java.
Same question for input streams! (normally, we should deduct the input stream classes from the output stream classes)
Or did you develop yourself such input stream or output stream classes that you'd accept to share?
Thx a lot
sandra
Thx a lot!
Edited by: Matt on Nov 20, 2008 9:50 AM - Fixed the postingYes it exists, but in release 7.10 only. [ABAP Keyword Documentation u2192 ABAP - By Theme u2192 Process External Data u2192 Streaming|http://help.sap.com/abapdocu/en/ABENSTREAMING.htm]
-
Hi there,
I would like to have the output stream coming from the server to the client displayed on a JTextArea. However, because the coming file is a text document that had its file name passed as a local variable in the main method header with String a[ ], I am having difficulty setting this as the area text because of the incompatible types. This text prints on my command prompt window but I cannot figure out how to get this stream into the JTextArea. This is my code. The objective is to ask a file from the server and have the server send this file to the client so the client can then make changes and save.
import java.io.*;
import java.net.*;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.Box;
import java.io.FileReader;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.Formatter;
public class Client extends JFrame{
public static JTextArea enterArea1;
public static JTextArea enterArea2;
public JButton change;
public JButton save;
public Client()
super ("Client to Server");
Box box = Box.createHorizontalBox();
enterArea1 = new JTextArea(10, 15);
enterArea1.setEditable (true);
box.add (new JScrollPane (enterArea1));
change = new JButton("Make Changes");
box.add(change);
change.addActionListener(
new ActionListener()
public void actionPerformed(ActionEvent event)
Scanner console = new Scanner (System.in);
System.out.print ("Input File: ");
String inputFileName = console.next ();
System.out.print ("Enter the text that you want to change");
String inputText1 = console.next ();
System.out.print ( "Output File: ");
String outputFileName = console.next();
try
FileReader reader = new FileReader (inputFileName);
Scanner in = new Scanner (reader);
PrintWriter out = new PrintWriter (outputFileName);
String line1 = in.nextLine();
out.println( " " + inputText1 );
out.close();
catch (IOException exception)
System.out.println ("Error processing file: " + exception);
save = new JButton("Save to File");
box.add(save);
save.addActionListener(
new ActionListener()
public void actionPerformed(ActionEvent event)
enterArea2.setText (enterArea1.getSelectedText());
enterArea2 = new JTextArea (10, 15);
enterArea2.setEditable (false);
box.add (new JScrollPane (enterArea2));
add (box);
public static void main(String a[]) throws IOException {
Socket sock;
BufferedReader dis;
PrintWriter dat;
Client sendServer = new Client();
sendServer.setSize (500, 200);
sendServer.setVisible(true);
sendServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sock = new Socket("127.0.0.1",4444);
dis = new BufferedReader( new InputStreamReader(sock.getInputStream()) );
dat = new PrintWriter( sock.getOutputStream() );
dat.println(a[0]);
dat.flush();
enterArea1.setText(a[0]);
PrintStream os = new PrintStream (new FileOutputStream ("out.txt"));
String fromServer = dis.readLine();
while (fromServer != null )
System.out.println(fromServer);
os.println(fromServer);
fromServer = dis.readLine();
sock.close();
}I believe that the logic is to append the text to the JTextArea with something along the lines of this, but since String a[0] is passed in my void method, it is not accepted as a string anymore. The question then becomes how to create a variable that is referenced to the output text on the command window so that this variable can be used to append the same text to the JTextArea. I will appreciate any comments. Right now, it sees the String text as null.
String text = dat.println(a[0]);
dat.flush();
enterArea1.append(text]); -
Oracle BLOB Writes the Bytes Twice to Output Stream
Hi,
I have a very strange problem when working with oracle.sql.BLOB; I cannot figure out what it's causing my BLOB stream output to double the amount of data inserted into the Oracle database. I have a table that contains two BLOB objects(image files) and the goal is to insert two images into each row by BLOB stream.
For example, if the image_bin size is 800k and image_thumbnail size is 100k, this code actually writes 1600k (double) and 200k (double) the amount of bytes to each BLOB column, respectively. The print method in insertBlob() indicates a correct number of bytes being written to the output stream (800k and 100k).
I know for the fact the retrieval method (not mentioned here) doesn't duplicate the bytes when it's read because I have written another test program that does not utilize oracle.sql.BLOB but instead uses PreparedStatement's setBinaryStream(index, InputStream, size_of_file) and it accurately writes the exact image size (no double sizing) to the database -- but not with BLOB. Here's a snippet of my code, note that the actual writing occurs in insertBlob():
private void insertBlob(java.sql.Blob lobImage, String imgName)
throws SQLException, IOException {
File imgFile = null;
FileInputStream imgOnDisk = null;
OutputStream imgToDB = null;
int bufferSize = 0;
oracle.sql.BLOB blobImage = (oracle.sql.BLOB) lobImage;
try {
int bytesRead = 0;
long bytesWritten = 0L;
byte[] byteBuffer = null;
bufferSize = blobImage.getBufferSize();
byteBuffer = new byte[bufferSize];
imgFile = new File(imgName);
// Stream to read the file from the local disk
imgOnDisk = new FileInputStream(imgFile);
// Stream to write to the Oracle database
imgToDB = blobImage.setBinaryStream(imgFile.length());
// Read from the disk file and write to the database
while ((bytesRead = imgOnDisk.read(byteBuffer)) != -1 ) {
imgToDB.write(byteBuffer, 0, bytesRead);
bytesWritten += bytesRead;
} // end of while
System.out.print("Done. " + bytesWritten + "-bytes inserted, buffer size: " +
bufferSize + "-bytes, chunk size: " +
blobImage.getChunkSize() + ".\n");
} catch (SQLException sqlEx) {
System.out.println("SQLException caught: JDBCOracleLOBBinaryStream.processBlob()");
connRollback();
throw sqlEx;
} catch (IOException ioe) {
System.out.println("IOException caught: JDBCOracleLOBBinaryStream.processBlob()");
throw ioe;
} finally {
try {
if (imgOnDisk != null ) {
imgOnDisk.close();
if (imgToDB != null ) {
imgToDB.close();
} catch (IOException ioeClosing) {
System.out.println("IOException caught: JDBCOracleLOBBinaryStream.processBlob() " +
"on closing stream.");
ioeClosing.printStackTrace();
} // end of finally
public void insertImageIntoOracleDB() throws SQLException, IOException {
PreparedStatement pstmt = null;
Statement stmt = null;
ResultSet rset = null;
try {
this.getConnection(_driver, host, port, database, user, _pass);
pstmt = conn.prepareStatement("INSERT INTO " +
" gallery_v (picture_id, picture_title, image_bin, image_thumbnail) " +
" VALUES (?, ?, EMPTY_BLOB(), EMPTY_BLOB())");
pstmt.setInt(1, picID);
pstmt.setString(2, picTitle);
pstmt.executeUpdate();
stmt = conn.createStatement();
rset = stmt.executeQuery("SELECT image_bin, image_thumbnail FROM gallery_v " +
" WHERE picture_id = " + picID + " FOR UPDATE");
int rsetCount = 0;
oracle.sql.BLOB imgBlob = null;
oracle.sql.BLOB imgThumbBlob = null;
while (rset.next()) {
imgBlob = ((OracleResultSet) rset).getBLOB("image_bin");
System.out.print("Inserting " + img + "... ");
insertBlob(imgBlob, img);
imgThumbBlob = ((OracleResultSet) rset).getBLOB("image_thumbnail");
System.out.print("Inserting " + imgThumb + "... ");
insertBlob(imgThumbBlob, imgThumb);
rsetCount++;
System.out.println("\nNumber of rows updated: " + rsetCount);
conn.commit();
} catch (SQLException sqlEx) {
System.out.println("SQLException caught: JDBCOracleLOBBinaryStream.insertImageIntoOracleDB()");
connRollback();
throw sqlEx;
} catch (IOException ioe) {
throw ioe;
} finally {
try {
if (rset != null) {
rset.close();
if (pstmt != null) {
pstmt.close();
if (stmt != null) {
stmt.close();
closeConnection();
} catch (SQLException closingSqlEx) {
System.out.println("SQLException caught: JDBCOracleLOBBinaryStream.insertImageIntoOracleDB() " +
"on closing ResultSet or PreparedStatement.");
closingSqlEx.printStackTrace();
} // end of finally
}Make a lumpy mistake; the new BLOB#setBinaryStream() method takes a position of where the data is read from in the stream given to it. So the following code:
imgToDB = blobImage.setBinaryStream(imgFile.length());
Starts off from the end of the file. Now I don't understand how this position would result in the duplicated amount of bytes read from the binary file (an image here) to the output stream! The correct line should be:
imgToDB = blobImage.setBinaryStream(0L);
ARGH!!! Now everything works as it expected. I gotta read the API's more carefully as I was expecting the same semantic parameter as PreparedStatement#setBinaryStream() which takes the length of the stream as one of its parameters.
Maybe you are looking for
-
Resizing images in a div to fit browser width
i have a page with rollovers in a DIV: http://toddheymandirector.com/REEL/index_newlook.html i want the the images, "nike the getaway", etc, to resize to fit the browser window width. i tried putting them in a div and adding row { max-width: 100%
-
New iphone 4 indicates that temporary voicemail password has expired, select a new one. In trying to do so, the first step is to enter current password. I either did not have one, or I don't remember it. Could the prompt mean just to enter a new pass
-
Multiple room management -- best practice -- server side http api update?
Hi Folks, Some of the forum postings on multiple room management are over year old now. I have student/tutor chat application which has been in the wild for 5 months now and appears to be working well. There is a single tutor per room, multiple ch
-
Sabemos de antemano que Adobe no escucha, pero ese no es el punto. El punto es que en http://groups.google.com/group/macromedia.general.espana/topics?lnk=rgh&pli=1 todas estas entradas de protesta quedaran archivadas como antecedentes de lo que le hi
-
Retaining clips or plastic spring clips HELP
I have Touchsmart IQ770 and wanted to replace video card but by taking the heatsink I broke 3 plastic clips that hold the sink down through the graphics card to the motherboard. As these clips can not be found anywhere, how you connect the sink to th